题目链接:313. 超级丑数 - 力扣(LeetCode)
解析:
一个超级丑数肯定是由小于该数的超级丑数 * prime得来,如果不是这样就有别的因数了
针对每个prime维护一个下标,初始指向第一个超级丑数,也就是1,遍历所有prime * 1 取最小值min_v,min_v就是第二个超级丑数
将所有等于min_v的 乘积,下标++
class Solution { public:int nthSuperUglyNumber(int n, vector<int>& primes) {int m = primes.size();vector<long> array(n, 0);vector<long> vis(m + 1, 0);array[0] = 1;for (int i = 1; i < n; i++) {long min_v = array[vis[0]] * primes[0];for (int j = 1; j < m; j++) {// if (vis[j] < i)min_v = min(min_v, array[vis[j]] * primes[j]);}for (int j = 0; j < m; j++) {if (array[vis[j]] * primes[j] == min_v) vis[j]++;}array[i] = min_v;}return array[n - 1];} };