leetcode ugly number 2
2015-12-01 12:15
316 查看
https://leetcode.com/problems/ugly-number-ii/
understanding:
丑陋数序列可以拆分为下面3个子列表:
我们可以发现每一个子列表都是丑陋数本身(1, 2, 3, 4, 5, …) ,乘以 2, 3, 5。注意这里不是所有自然数,而是丑陋数本身
接下来我们使用与归并排序相似的合并方法,从3个子列表中获取丑陋数。每一步我们从中选出最小的一个,然后向后移动一步。
这里可以用3个pointers,生成完第n个最大值的时候,对应的pointer就往前走一步。那么就可以控制搜索范围。
参考:http://bookshadow.com/weblog/2015/08/19/leetcode-ugly-number-ii/
code:
understanding:
丑陋数序列可以拆分为下面3个子列表:
(1) 1×2, 2×2, 3×2, 4×2, 5×2, … (2) 1×3, 2×3, 3×3, 4×3, 5×3, … (3) 1×5, 2×5, 3×5, 4×5, 5×5, …
我们可以发现每一个子列表都是丑陋数本身(1, 2, 3, 4, 5, …) ,乘以 2, 3, 5。注意这里不是所有自然数,而是丑陋数本身
接下来我们使用与归并排序相似的合并方法,从3个子列表中获取丑陋数。每一步我们从中选出最小的一个,然后向后移动一步。
这里可以用3个pointers,生成完第n个最大值的时候,对应的pointer就往前走一步。那么就可以控制搜索范围。
参考:http://bookshadow.com/weblog/2015/08/19/leetcode-ugly-number-ii/
code:
class Solution(object): def nthUglyNumber(self, n): """ :type n: int :rtype: int """ p = [1] k2 = k3 = k5 = 0 while len(p) < n: a, b, c = [p[k2]*2, p[k3]*3, p[k5]*5]#p[k2]负责生成乘以2的新ugly number,<span style="font-family: Arial, Helvetica, sans-serif;">p[k3]负责生成乘以3的新ugly number,</span> m = min([a,b,c]) if m == a: k2 += 1 if m == b: k3 += 1 if m == c: k5 += 1 p.append(m) return p[n-1]
相关文章推荐
- android 获得屏幕状态
- 单位和尺寸
- linux下VI模式中上下左右键和回退键出现字母
- hdu3949
- 【非技术】谈谈简历那些事儿
- AppleWatch___学习笔记(三)iPhone和Apple Watch上的数据同步
- linux开机到登陆的启动过程描述 【转】
- android-Storage Access Framework
- poj 3185
- java servlet proxy
- 提示fxp不是一个目标文件
- 单链表(线性链表)操作
- Java读书笔记十四(java中的抽象类)
- 如何使用json编程
- 重磅推荐:Android_JNI整套视频分享
- Numpy中的广播(Broadcasting)
- Im++ 移动社交通讯云服务产品白皮书——箭扣科技Arrownock
- leetcode@ [97] Interleaving Strings
- 20135321余佳源、20135323符运锦----实验三:实时系统的移植
- CF484D 把数组划分成几段,求所有段的最大值-最小值之和的最大值