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来存储不同素数对应的小丑数的下标。完整代码如下:

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

本代码提交AC,用时143MS。

Leave a Reply

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