算法小题之丑数
问题描述
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
分析
从1开始往上找,遇到合适的第n个即是答案.但是这样效率很低. 其实第i个丑数是可以由前i-1个推导出来的.因此有了O(n^2)的解决方案
代码
int GetUglyNumber_Solution(int index) {
vector<int> u={1,2,3,4,5};
for(int i = 5; i <index ; i++ ){
int minv= INT_MAX;
int j =0;
while(2*u[j] <= u[i-1])j++;
minv = minv >2*u[j]?2*u[j]: minv;
j =0 ;
while(3*u[j] <= u[i-1])j++;
minv = minv >3*u[j]?3*u[j]: minv;
j =0 ;
while(5*u[j] <= u[i-1])j++;
minv = minv >5*u[j]?5*u[j]: minv;
u.push_back(minv);
}
return u[index-1];
}