[LeetCode]313. Super Ugly Number
阿新 • • 發佈:2018-12-23
[LeetCode]313. Super Ugly Number
題目描述
思路
動態規劃
保持結果序列遞增,需要確保每次放入結果序列的數是當前乘積最小,當前的乘積是由產生序列的數和素數數組裡的數乘積得到的,因此需要一個狀態陣列來儲存對於素數數組裡的每個數,乘到了數組裡的第幾個數,最終生成序列
程式碼
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
int primesNum = primes.size();
vector<int> uglyArr(n, INT_MAX), indexArr(primesNum, 0);
uglyArr[0] = 1;
for (int i = 1; i < n; ++i) {
// 更新序列中的數
for (int index = 0; index < primesNum; index++) uglyArr[i] = min(uglyArr[i], uglyArr[indexArr[index]] * primes[index]);
// 序列中的數更新後,更新index陣列
for (int index = 0; index < primesNum; index++) indexArr[index] += (uglyArr[i] == uglyArr[indexArr[index]] * primes[index]);
}
return uglyArr[n - 1];
}
};
int main() {
vector<int> primes = { 2,7,13,19 };
Solution s;
cout << s.nthSuperUglyNumber(11 , primes) << endl;
system("pause");
return 0;
}