您的位置:首页 > 其它

丑数

2017-05-03 19:57 120 查看


题目描述

把只包含素因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

class Solution {
public:
int Min(int number1,int number2,int number3)
{

int min =(number1<number2)?number1:number2;
min=(min<number3)?min:number3;
return min;
}
int GetUglyNumber_Solution(int index) {
//每一个丑数必然是由之前的某个丑数与2,3或5的乘积得到的,这样下一个丑数就用之前的丑数分别乘以2,3,5,找出这三这种最小的并且大于当前最大丑数的值,即为下一个要求的丑数。
if(index <= 0)
return 0;
int *UglyNums=new int[index];
UglyNums[0] = 1;
int CurrentIndex= 1; //当前要求的丑数的下标索引
int *p2 = UglyNums;
int *p3 = UglyNums;
int *p5 = UglyNums;

//求每个丑数,并保存起来
while(CurrentIndex < index)
{
int min = Min(2*(*p2),3*(*p3),5*(*p5));
UglyNums[CurrentIndex] = min;

//每次循环都从上次的p2,p3和p5的下一个位置开始
while(2*(*p2) <= UglyNums[CurrentIndex])
++p2;
while(3*(*p3) <= UglyNums[CurrentIndex])
++p3;
while(5*(*p5) <= UglyNums[CurrentIndex])
++p5;

++CurrentIndex;
}

int result = UglyNums[index-1];
return result;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: