三路归并法
class Solution {
public:
int getUglyNumber(int n) {
vector<int> q(1, 1); //初始q中有一个元素,该元素为1
int i = 0, j = 0, k = 0;
while (q.size() < n)
{
//注意观察q中的值完全是由2、3、5组成的
int t = min(q[i] * 2, min(q[j] * 3, q[k] * 5));
q.push_back(t);
if (q[i] * 2 == t) i ++ ; //当t = 30时,i、j、k都会自增1
if (q[j] * 3 == t) j ++ ;
if (q[k] * 5 == t) k ++ ;
}
return q.back(); //或者 return q[n - 1]
}
};