摘要:建兩個(gè)新數(shù)組,一個(gè)存數(shù),一個(gè)存。數(shù)組中所有元素初值都是。實(shí)現(xiàn)的過程是,一個(gè)循環(huán)里包含兩個(gè)子循環(huán)。兩個(gè)子循環(huán)的作用分別是,遍歷數(shù)組與相乘找到最小乘積存入再遍歷一次數(shù)組與的乘積,結(jié)果與相同的,就將加,即跳過這個(gè)結(jié)果相同結(jié)果只存一次。
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建兩個(gè)新數(shù)組,一個(gè)存ugly數(shù),一個(gè)存index。ugly數(shù)從1開始,后面的是只包含于primes[]中因數(shù)的乘積,如例子中取n = 9,則ugly = [1, 2, 4, 7, 8, 13, 14, 16, 19],ugly[8] = 19。index數(shù)組中所有元素初值都是0。
實(shí)現(xiàn)的過程是,一個(gè)for循環(huán)里包含兩個(gè)子循環(huán)。看上去不是很容易理解。簡而言之,對i來說,每個(gè)循環(huán)給ugly[i]賦值。兩個(gè)子循環(huán)的作用分別是,遍歷primes數(shù)組與ugly[index[j]]相乘找到最小乘積存入ugly[i];再遍歷一次primes數(shù)組與ugly[index[j]]的乘積,結(jié)果與ugly[i]相同的,就將index[j]加1,即跳過這個(gè)結(jié)果(相同結(jié)果只存一次)。
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]; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65638.html
摘要:題目解答這個(gè)問題最主要的就是如果按順序找出那么我們?nèi)绻芟氲桨岩詾橐蜃拥倪@些分成三個(gè)然后在每次輸出時(shí)取里最小的那個(gè)數(shù)輸出就可以解決了。 264 Ugly NumberII題目:Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors only i...
摘要:每次出一個(gè)數(shù),就把這個(gè)數(shù)的結(jié)果都放進(jìn)去。,指針從個(gè)變成個(gè)。的做法參考還是復(fù)雜度的問題,回頭再看看 264. Ugly Number II 題目鏈接:https://leetcode.com/problems... dp的方法參考discussion:https://discuss.leetcode.com/... dp的subproblem是:dp[i]: i-th ugly numb...
摘要:滾動求最大值復(fù)雜度考慮一個(gè),的值是下一個(gè)可能的替補(bǔ)值。思路數(shù)組中保存的是之前保留到的值,因?yàn)橄乱粋€(gè)可能的值是和之前的值的倍數(shù)關(guān)系。 Leetcode[313] Super Ugly Number Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whos...
摘要:題意找出以某些數(shù)為公因數(shù)的遞增排序的第個(gè)數(shù)條件維護(hù)了的元素的相乘因素的。由于是最小值,所以每次保留最小的。問題轉(zhuǎn)化,多次迭代,變成,處理對象變了。不重復(fù)的思想找出重復(fù)計(jì)算的地方,找出不重復(fù)計(jì)算的方法,用極值約束,加以記錄。 題意:找出以某些數(shù)為公因數(shù)的 遞增排序的第n個(gè)數(shù) 條件:indexes 維護(hù)了 primes的元素的相乘因素(uglies)的index。 思路:每次從 prim...
摘要:整個(gè)過程相當(dāng)于,直接在和里去掉既是又是的。所以最后返回的,一定是只出現(xiàn)過一次的,而出現(xiàn)兩次的都在里,出現(xiàn)三次的都被消去了。 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...
閱讀 1641·2021-09-22 15:25
閱讀 1519·2021-09-07 10:06
閱讀 3195·2019-08-30 15:53
閱讀 1099·2019-08-29 13:12
閱讀 3390·2019-08-29 13:07
閱讀 738·2019-08-28 18:19
閱讀 2278·2019-08-27 10:57
閱讀 995·2019-08-26 13:29