题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
因为丑数的质子是2,3,5,那么就可得出一个结论,后面的丑数都是由前面的数*2,*3,*5得到的,所以我们可以建三个数组,第一个数组存*2得到数,第二个数组存*3的到的数,第三个数组存*5得到的数,然后每次将三个数组中最小的数字存入丑数数组中就可以得到,并且还要注意去重
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index < 7)
return index;
vector<int> v;
int p2 = 0,p3 = 0, p5 = 0;
int temp = 1;
v.push_back(temp);
while(v.size() < index)
{
temp = min(v[p2] * 2,min(v[p3] * 3,v[p5] * 5));
if(v[p2] * 2 == temp) p2++;
if(v[p3] * 3 == temp) p3++;
if(v[p5] * 5 == temp) p5++;
v.push_back(temp);
}
return temp;
}
};