zoukankan      html  css  js  c++  java
  • leetcode 丑数系列

    263.丑数Ⅰ

    编写一个程序判断给定的数是否为丑数。

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

    示例 1:

    输入: 6
    输出: true
    解释: 6 = 2 × 3
    示例 2:

    输入: 8
    输出: true
    解释: 8 = 2 × 2 × 2
    示例 3:

    输入: 14
    输出: false
    解释: 14 不是丑数,因为它包含了另外一个质因数 7。
    说明:

    1 是丑数。
    输入不会超过 32 位有符号整数的范围: [−231,  231 − 1]。

    class Solution {
        public boolean isUgly(int num) {
            if(num<=0)
                return false;
            while(num!=1){
                if(num%2==0)
                    num/=2;
                else if(num%3==0)
                    num/=3;
                else if(num%5==0)
                    num/=5;
                else
                    return false;
            }
            return true;
        }
    }

    264.丑数Ⅱ

    编写一个程序,找出第 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 = new int[n];
            dp[0] = 1;
            int i2=0,i3=0,i5=0;
            for(int i=1;i<n;i++){
                int min = Math.min(Math.min(dp[i2]*2,dp[i3]*3), dp[i5]*5);
                if(min==dp[i2]*2)
                    i2++;
                if(min==dp[i3]*3)
                    i3++;
                if(min==dp[i5]*5)
                    i5++;
                dp[i] = min;
            }
            return dp[n-1];
        }
    }

    313.超级丑数

    编写一段程序来查找第 n 个超级丑数。

    超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。

    示例:

    输入: n = 12, primes = [2,7,13,19]
    输出: 32
    解释: 给定长度为 4 的质数列表 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。
    说明:

    1 是任何给定 primes 的超级丑数。
     给定 primes 中的数字以升序排列。
    0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000 。
    第 n 个超级丑数确保在 32 位有符整数范围内。

    class Solution {
        public int nthSuperUglyNumber(int n, int[] primes) {
            int k = primes.length;
            int[] arr = new int[n];
            arr[0] = 1;
            int[] indexs = new int[k];
            for(int i=1;i<n;i++){
                int min = Integer.MAX_VALUE;
                for(int j=0;j<k;j++){
                    min = Math.min(min,primes[j]*arr[indexs[j]]);
                }
                for(int j=0;j<k;j++){
                    if(min==primes[j]*arr[indexs[j]])
                        indexs[j]++;
                }
                arr[i] = min;
            }
            return arr[n-1];
        }
    }
  • 相关阅读:
    ASP.NET Core 静态资源的打包与压缩
    算法
    字符串反转
    js 获取随机数
    AspNetCore MVC 跨域
    add digits
    1-bit and 2-bit Characters
    删除字符串中出现次数最少的字符
    洗牌
    哈夫曼编码
  • 原文地址:https://www.cnblogs.com/hekuiFlye/p/12815116.html
Copyright © 2011-2022 走看看