把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路,三根指针.
data[cur]= min(p2 2, *p3*3, *p5*5);
code:
class Solution {
public:
int GetUglyNumber_Solution(int index)
{
if(1 == index)
{
return 1;
}
int answer= 1;
vector<int> datas(index);
datas[0]= 1;
int pos= 0, pos2= 0, pos3= 0, pos5= 0;
int k2= 1, k3= 1, k5= 1;
for(int i= 0; i< index-1; ++i)
{
while(datas[pos2]*2<= datas[pos])
{
++pos2;
}
while(datas[pos3]*3<= datas[pos])
{
++pos3;
}
while(datas[pos5]*5<= datas[pos])
{
++pos5;
}
datas[pos+1]= min(min(datas[pos2]*2, datas[pos3]*3), datas[pos5]*5);
++pos;
}
return datas.back();
}
};