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];
    }
};
发布了160 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44778155/article/details/105309144