Write a program to find the n-th ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first 10 ugly numbers.

Note that 1 is typically treated as an ugly number.

Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

这题是Ugly Number 的进阶题,其中一种比较简单粗暴的做法是写一个循环,然后把每个数都扔进isUglyNumber 里判断。

后面根据提示,ugly number 肯定是由其他ugly number 相乘产生的,于是要只要根据 2,3,5 分别产生出3个ugly number 的list, 然后用merge sort 的merge 思路,把三个list 合并成一个有序的list。这个算法口述比较麻烦,最好是画一个图。

2 3 5 min
2 * 1 3 * 1 5 * 1 2
2 * 2 3 * 1 5 * 1 3
2 * 2 3 * 2 5 * 1 4
2 * 3 3 * 2 5 * 1 5
2 * 3 3 * 2 5 * 2 6
2 * 4 3 * 3 5* 2 8

根据这个列表来计算的话可以一直延长uglynumber 列表,每一列表示2,3,5产生的列表,每行表示一次迭代,最右边的min 列表示每次迭代产生的uglynumber。

算法就是每次都选三列中最小那个,然后更新那一列,更新的方法就是乘以当前ugly 列表里的数。比如列2,第一次乘以1,因为1是ugly list 的第一个元素,1*2 = 2,2 被选为下一ugly number, 所以要更新列2, 现在就要用2 乘以ugly list的第二个元素,即刚刚添加进去的2。

/**
* @param {number} n
* @return {number}
*/
var nthUglyNumber = function(n) {
if (n <= 0) return [];
var arr = [1];
var l = [1,1,1];
var c = [2,3,5];
var index = [0,0,0]; while (n > arr.length) {
var min = l[0] * 2;
for (var i = 0; i < 3; i++) {
l[i] = arr[index[i]] *c[i];
min = Math.min(min, l[i]);
} for (var i = 0; i < 3; i++) {
if (l[i] == min) {
index[i]++;
}
} arr.push(min);
} return arr[arr.length-1];
};

[LeetCode] Ugly Number II的更多相关文章

  1. [LeetCode] Ugly Number II 丑陋数之二

    Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...

  2. [LeetCode] Ugly Number II (A New Question Added Today)

    Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...

  3. LeetCode() Ugly Number II 背下来!

    一个别人,非常牛逼的思路,膜拜了!orz!!!! vector <int> results (1,1); int i = 0, j = 0, k = 0; while (results.s ...

  4. Leetcode之动态规划(DP)专题-264. 丑数 II(Ugly Number II)

    Leetcode之动态规划(DP)专题-264. 丑数 II(Ugly Number II) 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n ...

  5. 【LeetCode】264. Ugly Number II

    Ugly Number II Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose ...

  6. leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes

    263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...

  7. [leetcode] 264. Ugly Number II (medium)

    263. Ugly Number的子母题 题目要求输出从1开始数,第n个ugly number是什么并且输出. 一开始想着1遍历到n直接判断,超时了. class Solution { public: ...

  8. 【刷题-LeetCode】264. Ugly Number II

    Ugly Number II Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose ...

  9. [LeetCode] Ugly Number 丑陋数

    Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...

随机推荐

  1. Citrix运行检测出错

    Citrix运行检测出错: 出现意外错误.请确认服务器名称正确.服务器已打开.Citrix XenApp 已安装在服务器上并且 Citrix MFCOM 服务正在运行. 看Windows日志出现如下错 ...

  2. 对称加密之AES、压缩解压以及压缩加密解密解压综合实战

    AES 压缩解压 压缩加密解密解压 对称加密: 就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密.密钥是控制加密及解密过程的指令.算法是一组规则,规定如何进行加密和解密.   因此加密的安 ...

  3. CEF3开发者系列之类和接口

    CEF3基本的框架包含C/C++程 序接口,通过本地库的接口来实现,而这个库则会隔离宿主程序和 Chromium&Webkit的操作细节.它在浏览器控件和宿主程序之间提供紧密的整合,它支持用户 ...

  4. ios 音乐播放,音乐信息显示方法

    下面的博客写的很清楚了 http://msching.github.io/blog/page/2/ 主要涉及AVAudioPlayer和下面这几个函数 MPNowPlayingInfoCenter.d ...

  5. iOS 串行网络请求。。。待研究

    nsurlsession 和 nsurlconnection 能实现吗? 手动实现的关键点在哪里? 我这里说的串行网络请求,指的是第一个网络请求不返回数据,第二个网络请求就不能开始. AFNetwor ...

  6. MySQL SQL优化之in与range查询【转】

    本文来自:http://myrock.github.io/ 首先我们来说下in()这种方式的查询.在<高性能MySQL>里面提及用in这种方式可以有效的替代一定的range查询,提升查询效 ...

  7. ffmpeg-20160508-git-bin-v2

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  8. Linux中环境变量文件及配置(转载)

    一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登 ...

  9. maven编译时如何忽略单元测试

    共有两种解决办法 1.通过在命令行设置:-Dmaven.test.skip=true 如:mvn clean install tomcat:run -Dmaven.test.skip=true 2.通 ...

  10. September 10th 2016 Week 37th Saturday

    An innovation that goes beyond imagination again raised the standard. 颠覆想象的创新,再一次刷新标准. An advertisem ...