1. 程式人生 > >[LeetCode]313. Super Ugly Number

[LeetCode]313. Super Ugly Number

[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; }