您的位置:首页 > Web前端

丑数

2016-06-09 20:49 441 查看
丑数
一般把只包含因子2,3,5的数称为丑数,一般1为第一个丑数

题目:
求第N个丑数
程序1:比较直观但是时间效率不高的算法

bool IsUgly(int number)
{
while (number % 2 == 0)
number /= 2;
while (number % 3 == 0)
number /= 3;
while (number % 5 == 0)
number /= 5;
return (number == 1) ? true : false;
}
int GetUglyNumber(int index)
{
if (index <= 0)
return 0;
int number = 0;
int find = 0;
while (find < index)
{
++number;
if (IsUgly(number))
++find;
}
return number;
}
程序2:以空间换时间的算法
思想:创建一个数组,里面的数字是排序好的丑数,每一个丑数都输前面的丑数乘以2、3、5得到的
int Min(int num1, int num2, int num3)
{
int min = (num1 < num2) ? num1 : num2;
return (min < num3) ? min : num3;
}
int GetUglyNumber(int index)
{
if (index <= 0)
return 0;

int *uglyNumbers = new int[index];
uglyNumbers[0] = 1;
int nextUglyIndex = 1;

int *pNext1 = uglyNumbers;
int *pNext2 = uglyNumbers;
int *pNext3 = uglyNumbers;

while (nextUglyIndex < index)
{
int min = Min(*pNext1 * 2, *pNext2 * 3, *pNext3 * 5);
uglyNumbers[nextUglyIndex] = min;

while (*pNext1 * 2 <= uglyNumbers[nextUglyIndex])
++pNext1;
while (*pNext2 * 3 <= uglyNumbers[nextUglyIndex])
++pNext2;
while (*pNext3 * 5 <= uglyNumbers[nextUglyIndex])
++pNext3;
++nextUglyIndex;
}
int ugly = uglyNumbers[nextUglyIndex - 1];
delete[]uglyNumbers;
return ugly;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  offer 剑指