Та же проблема, что и у LeetCode264.
Мое решение:
Примечания к сведению:
(1) 1 также является уродливым числом
(2) При определении, кто увеличивает abc, используйте if вместо else if, поскольку вполне возможно, что dp [i] является результатом нескольких чисел, умноженных на коэффициенты
class Solution {
public:
int nthUglyNumber(int n) {
if(n<7) return n;
int *dp=new int[n];
int a=0,b=0,c=0;
dp[0]=1;
int i=1;
while(i<n){
dp[i]=min({2*dp[a],3*dp[b],5*dp[c]});
if(dp[i]==2*dp[a]) a++;
if(dp[i]==3*dp[b]) b++;
if(dp[i]==5*dp[c]) c++;
i++;
}
return dp[n-1];
}
};