思路:1.遍历
public static int GetUglyNumber_Solution1(int index) { if(index<=0) { return 0; } int i=1; ArrayList <Integer> list=new ArrayList<>(); while(list.size()<index){ int temp=i; while(i%2==0){ i=i/2; } while(i%3==0){ i=i/3; } while(i%5==0){ i=i/5; } if(i==1){ list.add(temp); } i=temp+1; } return list.get(index-1); }
2.每个丑数p=2^a*3*b*5^c
先把1加入序列array,维护三个队列
list1:array*2
list2:array*3
list3:array*5
每次取三个队列忠最小的加入array,如果最小有重复同时弹出
if(index<=0){ return 0; } ArrayList<Integer> list=new ArrayList<>(); list.add(1); int p2=0; int p3=0; int p5=0; int num=0; while(list.size()<index){ num=Math.min(list.get(p2)*2,Math.min((list.get(p3)*3),list.get(p5)*5)); if(num==list.get(p2)*2) p2++; if(num==list.get(p3)*3) p3++; if(num==list.get(p5)*5) p5++; list.add(num); } return list.get(index-1); }