您的位置:首页 > 编程语言 > C语言/C++

313. Super Ugly Number

2016-06-26 17:54 489 查看
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.

Note:

(1) 
1
 is a super ugly number for any given 
primes
.

(2) The given numbers in 
primes
 are in ascending order.

(3) 0 < 
k
 ≤ 100, 0 < 
n
 ≤
106, 0 < 
primes[i]
 <
1000.

我的解答:

用一个数组存储每次新加入的结果,用一个数组当作primes每个数对应的结果数组的序号。

class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
if(n <= 0) return false;
if(n == 1) return true;
vector<int>mp(primes.size(),0);
vector<int> k;
k.push_back(1);
for(int i = 1; i < n ; i ++)
{
int minn = INT_MAX;
for(int jj = 0; jj < primes.size(); jj++){
if(k[mp[jj]]*primes[jj] < minn)
minn = k[mp[jj]]*primes[jj];
}
k.push_back(minn);
for(int kk = 0; kk < primes.size(); kk++){
if(k[mp[kk]]*primes[kk] == minn){
mp[kk]++;
}
}
}
return k[n-1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ array