丑数
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;
}
};
相关文章推荐
- 剑指offer-丑数
- **[Lintcode]Ugly Number II 丑数 II
- 寻找第k个丑数
- Humble Numbers(丑数) 超详解!
- 剑指Offer面试题34题:丑数(Ugly Number)(while循环里面的三个小问题)
- 紫书章五例题七 丑数 UVa 136(多种方法,在这里介绍优先级队列)
- 丑数。。。vector赋予空间,min函数
- IMWeb提升营Day6 | 训练题33:丑数
- 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]
- 【剑指Offer学习】【面试题34:丑数】
- 【刷题剑指offer】丑数
- 丑数
- 丑数
- 丑数
- LintCode 4.丑数 II
- 笔试题:求第n个丑数
- 丑数java实现
- 丑数
- 剑指Offer---寻找第N个丑数
- poj丑数