思路: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); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步