[LeetCode] Ugly Number II
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的更多相关文章
- [LeetCode] Ugly Number II 丑陋数之二
Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...
- [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 ...
- LeetCode() Ugly Number II 背下来!
一个别人,非常牛逼的思路,膜拜了!orz!!!! vector <int> results (1,1); int i = 0, j = 0, k = 0; while (results.s ...
- Leetcode之动态规划(DP)专题-264. 丑数 II(Ugly Number II)
Leetcode之动态规划(DP)专题-264. 丑数 II(Ugly Number II) 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n ...
- 【LeetCode】264. Ugly Number II
Ugly Number II Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose ...
- 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 ...
- [leetcode] 264. Ugly Number II (medium)
263. Ugly Number的子母题 题目要求输出从1开始数,第n个ugly number是什么并且输出. 一开始想着1遍历到n直接判断,超时了. class Solution { public: ...
- 【刷题-LeetCode】264. Ugly Number II
Ugly Number II Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose ...
- [LeetCode] Ugly Number 丑陋数
Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...
随机推荐
- dp重拾-01背包--HDU 2602
Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like ...
- hihoCoder 1303 数论六·模线性方程组
Description 求解模线性方程组, \(m_i\) 不互质. Sol 扩展欧几里得+中国剩余定理. 首先两两合并跟上篇博文一样. 每次通解就是每次增加两个数的最小公倍数,这对取模任意一个数都是 ...
- Android 手势水平监听判断
package com.zihao.ui; import com.zihao.R; import android.os.Bundle; import android.app.Activity; imp ...
- VS2012创建UML项目
1.选择建模工具 2.添加新建项 3.添加UML图或用例图 4.打开工具箱添加
- Tomcat启动服务报错:Unknown version string [3.1]. Default version will be used.
用Intellij IDEA 部署Web项目,Tomcat启动后报错Unknown version string [3.1]. Default version will be used. 作者的问题出 ...
- c3p0 config
c3p0-config.xml<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> ...
- Linux下安装gcc和g++
以CentOS为例,安装后是没有C语言和C++编译环境的,需要手动安装,最简单的是用yum的方式安装,过程如下: 1.安装gcc yum install gcc 询问是否,按y键回车即可,或者 yum ...
- Java for LeetCode 228 Summary Ranges
Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...
- ABAP 通过视图取数到内表函数
CALL FUNCTION 'VIEW_GET_DATA' EXPORTING view_name = 'V_TVBUR' TABLES data = ...
- Effective C++ -----条款12: 复制对象时勿忘其每一个成分
Copying函数应该确保复制“对象内的所有成员变量”及“所有base class成分”. 不要尝试以某个copying函数实现另一个copying函数.应该将共同机能放进第三个函数中,并由两个cop ...