Ugly Number II
2015-12-03 23:01
190 查看
TLE解法:
AC解法:
可以将丑数分成三个队列
l1:1*2,2*2,3*2,4*2,5*2,6*2,8*2……
l2:1*3,2*3,3*3,4*3,5*3,6*3,8*3……
l3:1*5,2*5,3*5,4*5,5*5,6*5,8*5……
每次从三个队列中拿出队头的数比较,最小的数为当前ith的丑数,循环操作直到为i<n,就找到了nth的丑数。代码:
public class Solution { public int nthUglyNumber(int n) { int count = 0; int i = 1; while(count<n){ if(isugly(i)){ count++; } i++; } return i; } public boolean isugly(int n){ if(n == 1) return true; while(n%2==0)n /= 2; while(n%3 == 0) n/=3; while(n%5==0)n/=5; if(n == 1) return true; else return false; } }
AC解法:
可以将丑数分成三个队列
l1:1*2,2*2,3*2,4*2,5*2,6*2,8*2……
l2:1*3,2*3,3*3,4*3,5*3,6*3,8*3……
l3:1*5,2*5,3*5,4*5,5*5,6*5,8*5……
每次从三个队列中拿出队头的数比较,最小的数为当前ith的丑数,循环操作直到为i<n,就找到了nth的丑数。代码:
public class Solution { public int nthUglyNumber(int n) { int r = 0; List <Integer> l1 = new LinkedList<Integer>(); List <Integer> l2 = new LinkedList<Integer>(); List <Integer> l3 = new LinkedList<Integer>(); l1.add(1); l2.add(1); l3.add(1); for(int i = 0;i<n;i++){ r = l1.get(0)<l2.get(0)?(l1.get(0)<l3.get(0)?l1.get(0):l3.get(0)):(l2.get(0)<l3.get(0)?l2.get(0):l3.get(0)); if(l1.get(0)==r)l1.remove(0); if(l2.get(0)==r)l2.remove(0); if(l3.get(0)==r)l3.remove(0); l1.add(r*2); l2.add(r*3); l3.add(r*5); } return r; } }
相关文章推荐
- iphone开发之旅--环境搭建(1)
- 黑马程序员—javaSE—反射和新特性
- 网络爬虫
- prototype/call
- C#_字符串截取Substring实例方法
- QString简介
- [开发记录][微信]开发者模式验证与基本回复功能
- http://blog.csdn.net/wankunde/article/details/41675079/Spark 学习入门教程
- 后台管理界面-- 登录设计
- 普通二叉树C++实现
- hdu3487 Play with Chain
- Android中JNI开发之常见错误
- 杭电oj 1012
- LeetCode题解 #12 Integer to Roman
- 64位win2003/win2008系统IIS6.0/7.5配置PHP的方法
- C#_格式化输入日期时间
- 黑马程序员—javaSE—IO流
- 二叉搜索树、B树
- hive加载数据后查询为空
- iis7.5安装配置php环境详细清晰教程,三步实现【图文】