丑数
题目
我们把只包含质因子2、3和5的数称作丑数(Ugly Number)。
例如6、8都是丑数,但14不是,因为它包含质因子7。
求第n个丑数的值。
注意
习惯上我们把1当做第一个丑数。
样例
输入:5
输出:5
题解
思路
- 这题可以理解为求只包含2,3,5质数因为的数的从小到大的集合
- 第一路是包含质因子2的所有数的集合,第二路是包含3的质因子的所有数的集合,第三路是包含5的质因子的所有数的集合
- 将每一路的元素归并在的同一个数组中,且这个数组可以保证其中的每个元素都是只包含2,3,5质因子
class Solution {
public:
int getUglyNumber(int n) {
vector<int> q(1, 1);
int i = 0, j = 0, k = 0;
while (-- n) {
int t = min(q[i] * 2, min(q[j] * 3, q[k] * 5));
if (t == q[i] * 2) i ++;
if (t == q[j] * 3) j ++;
if (t == q[k] * 5) k ++;
q.push_back(t);
}
return q.back();
}
};