题目描述:
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
本题知识点:
穷举
解题思路:
首先所有的丑数都是{2,3,5}的倍数,所以{2,3,5},{4,6,10},{6,9,15}...这些都是丑数,但是顺序却无法确定,于是我们使用三个指针*,分别指向{2,3,5}中每个数达到了哪一步来进行判断当前的最小值。
(1)1,指针为0,0,0
* 2
* 3
* 5
(2)1 2,指针为1,0,0
2 * 4
*3
*5
(3)1 2 3,指针为1,1,0
2 * 4
3 * 6
*5
(4)1 2 3 4,指针为2,1,0
2 4 * 6
3 * 6
* 5
......
依次类推,每次将最小的放入数组,并将存入数组那一行的指针向后移一位。
代码:
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index < 7)
return index;
int p2 = 0, p3 = 0, p5 = 0, num = 1;
vector<int> v;
v.push_back(num);
for(int i = 1; i < index; i++)
{
num = min(v[p2]*2, min(v[p3]*3, v[p5]*5));
if(num == v[p2] * 2) p2++;
if(num == v[p3] * 3) p3++;
if(num == v[p5] * 5) p5++;
v.push_back(num);
}
return num;
}
};