zoukankan      html  css  js  c++  java
  • [LeetCode]313. Super Ugly Number超级丑数,丑数系列看这一道就行了

    丑数系列的题看这一道就可以了

    /*
        和ugly number2差不多,不过这次的质因子多了,所以用数组来表示质因子的target坐标
        target坐标指的是这个质因子此次要乘的前任丑数是谁
         */
        public int nthSuperUglyNumber(int n, int[] primes) {
            //记录相乘坐标,存的是每个质因子对应相乘搭档在丑数数组中的下标
            int[] target = new int[primes.length];
            //动态规划数组
            int[] dp = new int[n];
            //第一个丑数是0
            dp[0] = 1;
            for (int i = 1; i < n; i++) {
                //每次都要把所有质因子都乘上对应数试试,维护一个min和一个index
                int min  = Integer.MAX_VALUE;
                int index = 0;
                for (int j = 0; j < primes.length; j++) {
                    if (min>primes[j]*dp[target[j]])
                    {
                        min = primes[j]*dp[target[j]];
                        index = j;
                    }
                    //别忘了,如果有另外的质因子也组成了相同的数,那么这个质因子的target要跳过
                    //因为得到相同丑数的组合只保留一种即可
                    //在丑数2中,由于是分别判断2,3,5,所以重复的组合都跳过了
                    else if (min==primes[j]*dp[target[j]]) target[j]++;
                }
                //更新dp和target
                dp[i] = min;
                target[index]++;
            }
            return dp[n-1];
        }
  • 相关阅读:
    [LeetCode] Sort Colors
    [LeetCode] Trapping Rain Water
    [LeetCode] Sudoku Solver
    [LeetCode] Valid Sudoku
    [LeetCode] Candy
    [LeetCode] Permutation Sequence
    [名词解释]Constant Amortized Time
    回溯法 子集树和排序树
    HDU 4859 海岸线 最小割
    敏捷开发一千零一问:怎样处理重要但不明白的任务?
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8478811.html
Copyright © 2011-2022 走看看