面试题34_丑数
来源:互联网 发布:acg18新域名 编辑:程序博客网 时间:2024/06/06 07:14
题目描述
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路一:
从一开始,逐个判断是不是丑数,一直到找到第N个丑数。这种方法会做很多无用计算。把不是丑数的数也统统计算了一遍,会超时。
思路二:
可不可以只计算丑数?
答案是可以!开一个数组存储已经找到的丑数。那么下一个丑数就会是当前找到的丑数数组中的某个数 乘以2 或 乘以3 或 乘以5,三者中的最小数。 这样我们找到的丑数在数组中也是排好序的,找到第N个,即题目所求。
解题思路
思路一:
从一开始,逐个判断是不是丑数,一直到找到第N个丑数。这种方法会做很多无用计算。把不是丑数的数也统统计算了一遍,会超时。
思路二:
可不可以只计算丑数?
答案是可以!开一个数组存储已经找到的丑数。那么下一个丑数就会是当前找到的丑数数组中的某个数 乘以2 或 乘以3 或 乘以5,三者中的最小数。 这样我们找到的丑数在数组中也是排好序的,找到第N个,即题目所求。
实现代码
//方法一 超时class Solution {public: int Getcntber_Solution(int index) { int ret=0; int cnt = 0; while(cnt < index) { ret++; if(iscnt(ret)) cnt++; } return ret; } bool iscnt(int num) { while(num%2==0) num /= 2; while(num%3==0) num /=3; while(num%5==0) num /=5; return (num==1) ? true : false; }};//方法二 只计算丑数,不计算额外别的数,加快速度class Solution {public: int Getcntber_Solution(int index) { if(index <=0) return 0; int* uglyNum = new int[index]; uglyNum[0] = 1; int cnt = 1; int *p2 = uglyNum; int *p3 = uglyNum; int *p5 = uglyNum; while(cnt < index) { uglyNum[cnt] = min(*p2*2, *p3*3, *p5*5); while((*p2)*2 <= uglyNum[cnt]) p2++; while((*p3)*3 <= uglyNum[cnt]) p3++; while((*p5)*5 <= uglyNum[cnt]) p5++; cnt++; } return uglyNum[index-1]; } int min(int a, int b, int c) { if(a<=b && a<=c) return a; else if(b<=a && b<=c) return b; else if(c<=a && c<= b) return c; }};
1 0
- 面试题34_丑数
- 剑指Offer_面试题34_丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34 丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 【面试题34】丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题34:丑数
- 面试题 34: 丑数
- [剑指offer][面试题34]丑数
- [剑指offer]面试题34:丑数
- [LeetCode]Copy List with Random Pointer
- iOS 查看静态库命令
- sql 删除所有表
- 高性能IP数据库格式详解 qqzeng-ip.dat
- PHP输出xls文件
- 面试题34_丑数
- C语言中的static用途
- struct msghdr 和 struct iovec
- Zabbix之配置文件详解
- MATLAB下使用libsvm (三)
- 小驱动程序Mainl
- STL
- HDU 5326 Work(求每个人的下属,直接和间接)
- 如何用cmd对SVN进行更新,并且将文件压缩解压