LeetCode Super Ugly Number

LeetCode Super Ugly Number Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k. For example, [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] is the sequence of the first 12 super ugly numbers given primes = [2, 7, 13, 19] of size 4. Note: (1) 1 is a super ugly number for any given primes. (2) The given numbers in primes are in ascending order. (3) 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.


这题是超级丑数,再也不想见到丑数了… 其实本质和LeetCode Ugly Number II没什么两样,只不过素数不局限于2,3,5了,只要用一个数组idx来存储不同素数对应的小丑数的下标。完整代码如下: [cpp] class Solution { public: int nthSuperUglyNumber(int n, vector<int>& primes) { if (n == 1)return 1; vector<int> ugly_nums = { 1 }; vector<int> idx(primes.size(), 0); int next_ugly_num = 0; while (ugly_nums.size() < n) { next_ugly_num = INT_MAX; for (int i = 0; i < primes.size(); i++) { next_ugly_num = min(next_ugly_num, primes[i] * ugly_nums[idx[i]]); } for (int i = 0; i < primes.size(); i++) { if (next_ugly_num == primes[i] * ugly_nums[idx[i]]) { idx[i]++; } } ugly_nums.push_back(next_ugly_num); } return next_ugly_num; } }; [/cpp] 本代码提交AC,用时143MS。]]>

Leave a Reply

Your email address will not be published. Required fields are marked *