丑数
2016-06-09 20:49
441 查看
丑数
一般把只包含因子2,3,5的数称为丑数,一般1为第一个丑数
题目:
求第N个丑数
程序1:比较直观但是时间效率不高的算法
思想:创建一个数组,里面的数字是排序好的丑数,每一个丑数都输前面的丑数乘以2、3、5得到的
一般把只包含因子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; }
相关文章推荐
- 2015互联网校招总结
- HDU I NEED A OFFER!
- BlockingQueue中add,offer,put方法区别
- 一招搞定多Offer选择
- 比较幸运的收到了两份offer
- 剑指Offer--003--二维数组中的查找
- 我的阿里巴巴offer之路
- 25岁研究生拿高薪互联网的offer,意气风发的走出学校
- 技术不牛如何才拿到国内IT巨头的Offer
- 2015互联网校招总结—一路走来
- 【算法训练营】二维数组中的查找
- 哈尔滨工程大学-电子通信专场-准员工经验分享会
- 拿到offer过后--大学最后时光最想做的那十件事
- BlockingQueue深入分析
- 2015应届生面试经历;
- 剑指offer:从尾到头打印链表
- 剑指 offer:矩形覆盖
- 剑指 offer:调整数组顺序使奇数位于偶数前面
- 剑指offer:第一个只出现一次的字符
- 剑指offer:Java实现从头到尾打印链表