Leetcode---264. 醜數 II---三路歸併

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];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章