难点:只包含质因子:2、3、5.。
思路:n个丑数的子集合乘以2/3/5仍是丑数,即:下一个丑数是从前面某个丑数中乘以2/3/5,且大于当前丑数推出来的,不是遍历判断出来的。
参考:剑指 Offer 49. 丑数(动态规划,清晰图解)
class Solution {
public:
int nthUglyNumber(int n) {
//a,b,c记录的是丑数,因此需要建立一个列表记录丑数
int a=0,b=0,c=0;
vector<int>rec(n);
int i=1;
rec[0]=1;
while(i<n){
int n2=rec[a]*2,n3=rec[b]*3,n5=rec[c]*5;
int temp=min(n2,min(n3,n5));
rec[i++]=temp;
if(n2==temp) a++;
if(n3==temp) b++;
if(n5==temp) c++;
}
return rec[n-1];
}
};
(3/8)