1.题目
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
2.实现思路
依次计算出丑数,设置三个指针,依次从小到大遍历这些求出的丑数,将这些指针所指的数分别乘2、3、5,再比较大小,将小的放进队列。
3.代码实现
public class GetUglyNumber {
public int getUglyNumber(int index){
if(index<=0){
return 0;
}
int twoIndex=0;
int threeIndex=0;
int fiveIndex=0;
List list=new ArrayList();
list.add(1);
while(list.size()<index){
int twoNumber=(int)list.get(twoIndex)*2;
int threeNumber=(int)list.get(threeIndex)*3;
int fiveNumber=(int)list.get(fiveIndex)*5;
int min=Math.min(Math.min(twoNumber,threeNumber),fiveNumber);
list.add(min);
if(min==twoNumber){
twoIndex++;
}
if(min==threeNumber){
threeIndex++;
}
if(min==fiveNumber){
fiveIndex++;
}
}
return (int)list.get(index-1);
}
@Test
public void test1(){
int index=7;
int result=getUglyNumber(index);
System.out.println(result);
}
@Test
public void test2(){
int index=0;
int result=getUglyNumber(index);
System.out.println(result);
}
}