c++
class Solution {
public:
int nthUglyNumber(int n) {
typedef long long ll;
priority_queue<ll, vector<ll>, greater<ll>> que;
que.push(1);
ll ans = 0;
while(n--) {
ans = que.top();
que.pop();
if (ans % 5 == 0) que.push(ans * 5);
else if (ans % 3 == 0) {
que.push(ans * 3);
que.push(ans * 5);
} else {
que.push(ans * 2);
que.push(ans * 3);
que.push(ans * 5);
}
}
return ans;
}
};
js
var nthUglyNumber = function(n) {
var list = [1], k2 = 0, k3 = 0, k5 = 0, ans = 1;
while (--n) {
ans = Math.min(list[k2] * 2, list[k3] * 3, list[k5] * 5);
list.push(ans);
if (ans == list[k2] * 2) k2++;
if (ans == list[k3] * 3) k3++;
if (ans == list[k5] * 5) k5++;
}
return ans;
};