摘要:建兩個新數組,一個存數,一個存。數組中所有元素初值都是。實現的過程是,一個循環里包含兩個子循環。兩個子循環的作用分別是,遍歷數組與相乘找到最小乘積存入再遍歷一次數組與的乘積,結果與相同的,就將加,即跳過這個結果相同結果只存一次。
Problem
Write a program to find the nth super ugly number.
Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k. For example, [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] is the sequence of the first 12 super ugly numbers given primes = [2, 7, 13, 19] of size 4.
Notice1 is a super ugly number for any given primes.
The given numbers in primes are in ascending order.
0 < k ≤ 100, 0 < n ≤ 10^6, 0 < primes[i] < 1000
Given n = 6, primes = [2, 7, 13, 19] return 13
Note建兩個新數組,一個存ugly數,一個存index。ugly數從1開始,后面的是只包含于primes[]中因數的乘積,如例子中取n = 9,則ugly = [1, 2, 4, 7, 8, 13, 14, 16, 19],ugly[8] = 19。index數組中所有元素初值都是0。
實現的過程是,一個for循環里包含兩個子循環。看上去不是很容易理解。簡而言之,對i來說,每個循環給ugly[i]賦值。兩個子循環的作用分別是,遍歷primes數組與ugly[index[j]]相乘找到最小乘積存入ugly[i];再遍歷一次primes數組與ugly[index[j]]的乘積,結果與ugly[i]相同的,就將index[j]加1,即跳過這個結果(相同結果只存一次)。
Solutionpublic class Solution { public int nthSuperUglyNumber(int n, int[] primes) { int[] ugly = new int[n]; int[] index = new int[primes.length]; ugly[0] = 1; for (int i = 1; i < n; i++) { //find next ugly[i] = Integer.MAX_VALUE; for (int j = 0; j < primes.length; j++) ugly[i] = Math.min(ugly[i], primes[j] * ugly[index[j]]); //slip duplicate for (int j = 0; j < primes.length; j++) { while (primes[j] * ugly[index[j]] == ugly[i]) index[j]++; } } return ugly[n - 1]; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65638.html
摘要:題目解答這個問題最主要的就是如果按順序找出那么我們如果能想到把以為因子的這些分成三個然后在每次輸出時取里最小的那個數輸出就可以解決了。 264 Ugly NumberII題目:Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors only i...
摘要:每次出一個數,就把這個數的結果都放進去。,指針從個變成個。的做法參考還是復雜度的問題,回頭再看看 264. Ugly Number II 題目鏈接:https://leetcode.com/problems... dp的方法參考discussion:https://discuss.leetcode.com/... dp的subproblem是:dp[i]: i-th ugly numb...
摘要:滾動求最大值復雜度考慮一個,的值是下一個可能的替補值。思路數組中保存的是之前保留到的值,因為下一個可能的值是和之前的值的倍數關系。 Leetcode[313] Super Ugly Number Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whos...
摘要:題意找出以某些數為公因數的遞增排序的第個數條件維護了的元素的相乘因素的。由于是最小值,所以每次保留最小的。問題轉化,多次迭代,變成,處理對象變了。不重復的思想找出重復計算的地方,找出不重復計算的方法,用極值約束,加以記錄。 題意:找出以某些數為公因數的 遞增排序的第n個數 條件:indexes 維護了 primes的元素的相乘因素(uglies)的index。 思路:每次從 prim...
摘要:整個過程相當于,直接在和里去掉既是又是的。所以最后返回的,一定是只出現過一次的,而出現兩次的都在里,出現三次的都被消去了。 Single Number I Problem Given 2*n + 1 numbers, every numbers occurs twice except one, find it. Example Given [1,2,2,1,3,4,3], return...
閱讀 1625·2021-09-22 15:25
閱讀 1506·2021-09-07 10:06
閱讀 3183·2019-08-30 15:53
閱讀 1090·2019-08-29 13:12
閱讀 3373·2019-08-29 13:07
閱讀 725·2019-08-28 18:19
閱讀 2269·2019-08-27 10:57
閱讀 982·2019-08-26 13:29