剑指offer:丑数
2015-12-15 00:30
267 查看
题目描述
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。//超时代码 class Solution { public: bool uglyNum(int num) { while(num) { if(num % 2) num /= 2; else if(num % 3) num /= 3; else if(num % 5) num / 5; else break; } if(num == 1) return true; else return false; } int GetUglyNumber_Solution(int index) { if(index <= 0) return 0; if(index == 1) return 1; int i, cnt = 1; for(i = 2; ;i++) { if(uglyNum(i)) { cnt++; if(cnt == index) return i; } } } };
然后另一种思路是把找到的丑数都存起来,然后每次都从丑数中去寻找下一个丑数,就不会超时了。
class Solution { public: int minOfThree(int a, int b, int c) { return a < b ? (a < c ? a : c) : (b < c ? b : c); } int GetUglyNumber_Solution(int index) { if(index <= 0) return 0;//返回一个负数则报错 if(index == 1) return 1; vector<int> uglyNum; uglyNum.push_back(1); uglyNum.push_back(2); int i, j, ugly, ugly1, ugly2, ugly3; for(i = 1; i < index; i++) { ugly1 = ugly2 = ugly3 = INT_MAX; for(j = 0; j < i; j++) { if(uglyNum[j] * 2 > uglyNum[i]) { ugly1 = uglyNum[j] * 2; break; } } for(j = 0; j < i; j++) { if(uglyNum[j] * 3 > uglyNum[i]) { ugly2 = uglyNum[j] * 3; break; } } for(j = 0; j < i; j++) { if(uglyNum[j] * 5 > uglyNum[i]) { ugly3 = uglyNum[j] * 5; break; } } ugly = minOfThree(ugly1, ugly2, ugly3); uglyNum.push_back(ugly); } return uglyNum[index - 1]; } };
相关文章推荐
- Angular 学习笔记——ng-animate
- CSS动画之硬件加速
- javascript脚本从载入浏览器到显示执行的过程解析
- js----创建节点和插入节点
- JSP自定义标签入门学习
- 修改WordPress中文章编辑器的样式的方法详解
- 理解javascript闭包
- JQuery中Ajax()的data参数类型实例分析
- js简单网速测试方法完整实例
- JavaScript获取当前cpu使用率的方法
- JavaScript为事件句柄绑定监听函数实例详解
- jQuery获取DOM节点实例分析(2种方式)
- JavaScript组件开发完整示例
- jQuery进行组件开发完整实例
- JavaScript中Textarea滚动条不能拖动的解决方法
- Jquery插件easyUi实现表单验证示例
- js判断手机访问或者PC的几个例子(常用于手机跳转)
- javascript实现网页端解压并查看zip文件
- js编写“贪吃蛇”的小游戏
- javascript实现html页面之间参数传递的四种方法实例分析