把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
a,b,c分别记录*2,*3,*5的位置,下一个数就是这三个数分别*2,*3,*5得到的数的最小的那个数,存到数组中
public static int GetUglyNumber_Solution(int index) {
if (index<=0) return 0;
int a=0,b=0,c=0;
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
while(list.size()<index)
{
int next = Math.min(Math.min(list.get(a)*2,list.get(b)*3),list.get(c)*5);
if(next == list.get(a)*2) a++;
if(next == list.get(b)*3) b++;
if(next == list.get(c)*5) c++;
list.add(next);
}
return list.get(index-1);
}