剑指offer -- 丑数

leetcode链接:https://leetcode-cn.com/problems/chou-shu-lcof/

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

示例:

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

解题思路:由题可知,丑数一定是由之前的丑数通过乘2,乘3或者乘5得到的,第i个数满足以下条件: ,获得第i个丑数后,判断其是通过哪个方式获得的,将对应方式的索引加1。

class Solution {
    public int nthUglyNumber(int n) {
        int a=0,b=0,c=0;
        int[] dp = new int[n];
        dp[0] = 1;
        for(int i=1;i<n;i++){
            int tmp1 = dp[a] * 2;
            int tmp2 = dp[b] * 3;
            int tmp3 = dp[c] * 5;
            dp[i] = Math.min(Math.min(tmp1,tmp2),tmp3);
            if(dp[i] == tmp1){
                a++;
            }
            if(dp[i] == tmp2){
                b++;
            }
            if(dp[i] == tmp3){
                c++;
            }
        }
        return dp[n-1];
    }
}

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页