c++
class Solution {
public:
int nthUglyNumber(int n) {
if (n == 1) return 1;
vector<int> idx(9, 0);
vector<int> ugly(n, INT_MAX);
ugly[0] = 1;
for (int i = 1; i < n; ++i) {
for (int j = 0; j < 9; ++j) {
ugly[i] = min(ugly[i], primes[j] * ugly[idx[j]]);
}
for (int j = 0; j < 9; ++j) {
while (primes[j] * ugly[idx[j]] <= ugly[i]) {
idx[j] ++;
}
}
}
return ugly.back();
}
private:
vector<int> primes{ 2, 3, 4, 5, 6, 8, 9, 10, 12 };
};
reference:
http://blog.youkuaiyun.com/u013609078/article/details/51701031