剑指offer 49 丑数

我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

示例:

输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:

1 是丑数。
n 不超过1690。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/chou-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    public int nthUglyNumber(int n) {
        if(n <= 1) return n;
        int[] dp = new int[n];
        dp[0] = 1;
        int a = 0, b = 0, c = 0;//三指针
        for(int i = 1; i < n; i++){
            dp[i] = Math.min(Math.min(dp[a] * 2, dp[b] * 3), dp[c] * 5);//下一个丑数必为,三个中最小一个
            if(dp[i] == 2*dp[a]) a++;
            if(dp[i] == 3*dp[b]) b++;
            if(dp[i] == 5*dp[c]) c++;
        }
        return dp[n - 1];
    }
}

版权声明:本文为weixin_42414127原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。