313. 超级丑数
解析:
一个超级丑数肯定是由小于该数的超级丑数 * 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]; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号