leetcode264. 丑数 II

74 阅读1分钟

编写一个程序,找出第 n 个丑数。

丑数就是质因数只包含 2, 3, 5 的正整数。

示例:

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

1 是丑数。
n 不超过1690。

解题思路

直接用treeset去重和排序

代码

class Solution {
    public int nthUglyNumber(int n) {

      TreeSet<Long> set=new TreeSet<>();
      long temp=1;
      int count=0;
      set.add(1l);
      while (count<n)
      {
       temp=set.pollFirst();
        
          count++;
          set.add(temp*2);
          set.add(temp*3);
          set.add(temp*5);

      }

     return (int)temp;

    }
}

动态规划代码

class Solution {
    public int nthUglyNumber(int n) {
        int[] dp=new int[n+1];
        int d2=0,d3=0,d5=0;
        dp[0]=1;
        for(int i=1;i<n;i++)
        {
            int min= Math.min(Math.min(dp[d2]*2,dp[d3]*3),dp[d5]*5);//最小的进数组
            dp[i]=min;
            if(dp[d2]*2==min) d2++;//已经出现了直接跳到下一个,防止重复
            if(dp[d3]*3==min) d3++;
            if(dp[d5]*5==min) d5++;
        }
        return dp[n-1];

    }
}