这题1690设置的真好,数组小了就溢出,大了就超时
寄!
class Solution {
public:
int nthUglyNumber(int n) {
int res=1;
int k=0;
vector<bool>dp(100000000,false);
for(int i=0;i<6;i++)dp[i]=true;
for(int i=6;i<99999999;i++){
if(i%2==0)dp[i]=dp[i/2];
if(i%3==0)dp[i]=dp[i/3];
if(i%5==0)dp[i]=dp[i/5];
}
//int k=1;
while(k<n){
if(dp[res])k++;
res++;
}
return res-1;
}
};
最后看了题解,用合并三个有序数组的思想来写的
class Solution {
public:
int nthUglyNumber(int n) {
int a=0,b=0,c=0;
vector<int>dp(n+1);
dp[0]=1;
for(int i=1;i<n+1;i++){
int x1=dp[a]*2,x2=dp[b]*3,x3=dp[c]*5;
dp[i]=min(min(x1,x2),x3);
if(dp[i]==dp[a]*2)a++;
if(dp[i]==dp[b]*3)b++;
if(dp[i]==dp[c]*5)c++;
}
return dp[n-1];
}
};