34丑数

原创 2015年07月10日 14:37:46


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 uglyFound = 0;
while (uglyFound < index)
{
++number;
if (IsUgly(number))
{
++uglyFound;
}
}
return number;
}

只需要在函数GetUglyNumber中传入参数1500,就能得到第1500个丑数。但是每个整数都需要做求余和除法运算,时间效率不是很高。



int GetUglyNumber_Solution2(int index)
{
if (index <= 0)
return 0;
int *pUglyNumbers = new int[index];
pUglyNumbers[0] = 1;
int nextUglyIndex = 1;
int* pMultiply2 = pUglyNumbers;
int* pMultiply3 = pUglyNumbers;
int* pMultiply5 = pUglyNumbers;
while (nextUglyIndex < index)
{
int min = Min(*pMultiply2 * 2, *pMultiply3 * 3, *pMultiply5 * 5);
pUglyNumbers[nextUglyIndex] = min;
while (*pMultiply2 * 2 <= pUglyNumbers[nextUglyIndex])
   ++pMultiply2;
while (*pMultiply3 * 3 <= pUglyNumbers[nextUglyIndex])
++pMultiply3;
while (*pMultiply5 * 5 <= pUglyNumbers[nextUglyIndex])
++pMultiply5;
++nextUglyIndex;
}
int ugly = pUglyNumbers[nextUglyIndex - 1];
delete[] pUglyNumbers;
return ugly;
}
int Min(int number1, int number2, int number3)
{
int min = (number1 < number2) ? number1 : number2;
min = (min < number3) ? min: number3;
return min;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

《剑指offer》:[34]丑数的判断与查找

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

剑指Offer面试题34题:丑数(Ugly Number)(while循环里面的三个小问题)

语言:C/C++语言 IDE:    Mac/Xcode  丑数:我们把只包含因子2、3、5的数称为丑数(Ugly Number),求按照从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不...

剑指Offer----面试题34:丑数

题目: 我们把只包含因子2、3和5的数成为丑数,求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。 方法一: 分析:逐...

剑指 offer代码解析——面试题34丑数

题目:我们把只包含因子2、3、5的数称为丑数。求从小到大顺序第1500个丑数。习惯上把1称为第一个丑数。 分析:所谓“只包含因子2、3、5”其实就是只能由2、3、5相乘得到的数称为丑数。根据上述特性,...

剑指offer 面试题34:寻找丑数(Leetcode 263.ugly number)解题报告

剑指offer 面试题34:寻找丑数 题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。请按从小到大...

【剑指Offer】面试题34:丑数

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

剑指offer-5-面试34:丑数(优化时间和空间效率)

题目 分析 逐个判断每个整数是不是丑数的解法直观但不够高效 创建数组保存已经找到的丑数用空间换时间的解法 测试用例代码 本题考点 题目 我们把只包含因子2、3和5的数称作丑数(Ugly N...

剑指offer-面试题34-丑数

题目描述:我们把只包含因子2,3和5的数称作丑数。求按从小到大的顺序的第1500个丑数。例如6,8都是丑数,14不是,因为它包含因子7.习惯上我们把1当做第一个丑数。题目分析:1)暴力解法。逐个判断每...

剑指Offer之面试题34:丑数

所有代码均通过G++编译器测试,仅为练手纪录。 //面试题34:丑数 //题目:我们把只包含因子2,3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500...

剑指Offer面试题34:丑数 Java实现

题目:丑数             我们把包含因子2,3,和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6,8都是丑数,但14不是,因为它包含因子7.习惯...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)