剑指OFFER49丑数
该程序采用逐次递归的方法,重点在于dp[a]、dp[b]、dp[c]三者可能相同,相同的时候其对应的索引位置也都要加1,因此需要三个if语句进行判断
class Solution {
public:
int nthUglyNumber(int n) {
vector<int> dp(n,0);
dp[0] = 1;
int a = 0;
int b = 0;
int c = 0;
for(int i=1;i<n;i++){
int n_a = dp[a] * 2;
int n_b = dp[b] * 3;
int n_c = dp[c] * 5;
dp[i] = min(min(n_a,n_b),n_c);
if(dp[i] == n_a) a++;
if(dp[i] == n_b) b++;
if(dp[i] == n_c) c++;
}
return dp[n-1];
}
};