题目如下
思路与代码
不断的算就好了,要么乘2,要么乘3,要么乘5
ugly[0]=1;//第一个丑数是1
ugly[1]=min(12,13,15)=2;// 0 0 0 -->1 0 0
ugly[2]=min(22,13,15)=3;// 1 0 0 -->1 1 0
ugly[3]=min(22,23,15)=4;// 1 1 0 -->2 1 0
ugly[4]=min(32,23,15)=5;// 2 1 0 -->2 1 1
ugly[5]=min(32,23,25)=6;// 2 1 1 -->3 2 1
ugly[6]=min(42,33,25)=8;// 3 2 1 -->4 2 1
一次类推就可以算出所有的丑数了
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index<=0) return 0;
vector<int> ugly(index);
ugly[0]=1;
int p2=0,p3=0,p5=0;
for(int i=1;i<index;i++){
ugly[i]=min(ugly[p2]*2,min(ugly[p3]*3,ugly[p5]*5));
if(ugly[i]==ugly[p2]*2) p2++;
if(ugly[i]==ugly[p3]*3) p3++;
if(ugly[i]==ugly[p5]*5) p5++;
}
return ugly[index-1];
}
};