class Solution {
public:
int GetUglyNumber_Solution(int index) {
if (index == 0) {
return 0;
}
// 存放丑数
std::vector<int> num;
int count = 1;
num.push_back(1);
// 所有丑数都是由1乘上 2 3 5 得到的
// 这里取最小的丑数乘上各自质因子中的最小数
int i = 0, j = 0, k = 0;
while (count < index) {
int tmp = std::min(num[i] * 2, std::min(num[j] * 3, num[k] * 5));
num.push_back(tmp);
// 乘上相应的数之后,该位不能再乘上同一个质因子
if (num[count] == num[i] * 2) {
++i;
}
if (num[count] == num[j] * 3) {
++j;
}
if (num[count] == num[k] * 5) {
++k;
}
++count;
}
return num[count - 1];
}
};