264. 醜數 II
編寫一個程序,找出第 n 個醜數。
醜數就是隻包含質因數 2, 3, 5 的正整數。
示例:
輸入: n = 10
輸出: 12
解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個醜數。
說明:
1 是醜數。
n 不超過1690。
實現代碼
class Solution {
public:
int nthUglyNumber(int n) {
int dp[1691] = { 0 }; dp[1] = 1;
int a[3] = { 1, 1, 1 }, m[3] = { 2,3,5 };
for (int i = 2; i <= n; i++) {
dp[i] = min(min(dp[a[0]] * m[0], dp[a[1]] * m[1]), dp[a[2]] * m[2]); // 選取最小那個,保證是遞增狀態
for (int j = 0; j < 3; j++) while (dp[a[j]] * m[j] <= dp[i]) ++a[j]; // 調整爲比下個dp[i]大的狀態
}
return dp[n];
}
};