您的位置:首页 > 其它

leetcode Super Ugly Number

2015-12-03 22:04 393 查看
原题链接:https://leetcode.com/problems/super-ugly-number/

Description

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.

优先队列。。

class Solution {
private:
typedef long long ll;
struct Node {
ll val;
int idx, prim;
Node(ll _v_ = 0, int _i_ = 0, int _p_ = 0) :val(_v_), idx(_i_), prim(_p_) {}
inline bool operator<(const Node &x) const {
return val > x.val;
}
};
typedef priority_queue<Node> PQ;
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
PQ q;
vector<ll> ans(n + 10); ans[0] = 1;
int len = primes.size();
for (int i = 0; i < len; i++) {
q.push(Node(primes[i], 0, primes[i]));
}
for (int i = 1; i < n; i++) {
Node ret = q.top();
ans[i] = ret.val;
while (true) {
ret = q.top(); q.pop();
ret.val = ans[++ret.idx] * ret.prim;
q.push(ret);
if (q.top().val != ans[i]) break;
};
}
return (int)ans[n - 1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: