0%

313. 超级丑数

313. 超级丑数

类似264. Ugly Number II | Cinte's Leetcode Record

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
vector<int> point(primes.size(), 0);
int m = primes.size();
vector<int> ret(n);
ret[0] = 1;
for(int i = 1; i < n; ++i)
{
int minVal = INT_MAX;
for(int j = 0; j < m; ++j)
{
minVal = min(ret[point[j]] * primes[j], minVal);
}
for(int j = 0; j < m; ++j)
if(minVal == ret[point[j]] * primes[j])
++point[j];
ret[i] = minVal;
}
return ret.back();
}
};

减少一次计算,用一个数组保存,将当前计算移动到上一轮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
int m = primes.size();
vector<long> nums(n + 1);
vector<int> pt(m);
vector<long> tmp(m, 1);
for(int i = 1; i <= n; ++i)
{
long minNum = INT_MAX;
for(int j = 0; j < m; ++j)
minNum = min(tmp[j], minNum);
nums[i] = minNum;
for(int j = 0; j < m; ++j)
if(minNum == tmp[j])
tmp[j] = nums[++pt[j]] * primes[j];
}
return nums.back();
}
};