LeetCode Ugly Number II
2015-09-15 06:21
459 查看
原题俩接在这里:https://leetcode.com/problems/ugly-number-ii/
题目:
Write a program to find the
Ugly numbers are positive numbers whose prime factors only include
Note that
题解:
是Ugly Number的进阶版。找出第n个ugly number.
这里让我们找到第n个丑陋数,还好题目中给了很多提示,基本上相当于告诉我们解法了,根据提示中的信息,我们知道丑陋数序列可以拆分为下面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, …
仔细观察上述三个列表,我们可以发现每个子列表都是一个丑陋数乘以2,3,5,而这些丑陋数的值就是从已经生成的序列中取出来的,我们每次都从三个列表中取出当前最小的那个加入序列.
Time Complexity: O(n). Space: O(n).
AC Java:
题目:
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, 12is the sequence of the first
10ugly numbers.
Note that
1is typically treated as an ugly number.
题解:
是Ugly Number的进阶版。找出第n个ugly number.
这里让我们找到第n个丑陋数,还好题目中给了很多提示,基本上相当于告诉我们解法了,根据提示中的信息,我们知道丑陋数序列可以拆分为下面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, …
仔细观察上述三个列表,我们可以发现每个子列表都是一个丑陋数乘以2,3,5,而这些丑陋数的值就是从已经生成的序列中取出来的,我们每次都从三个列表中取出当前最小的那个加入序列.
Time Complexity: O(n). Space: O(n).
AC Java:
public class Solution { public int nthUglyNumber(int n) { if(n<1){ return 0; } int [] dp = new int ; dp[0] = 1; int i2 = 0; int i3 = 0; int i5 = 0; for(int i = 1; i<n; i++){ dp[i] = Math.min(Math.min(dp[i2] * 2, dp[i3] * 3), dp[i5] * 5); if(dp[i] == dp[i2] * 2){ i2++; } if(dp[i] == dp[i3] * 3){ i3++; } if(dp[i] == dp[i5] * 5){ i5++; } } return dp[n-1]; } }
相关文章推荐
- 插件开发技术说明(15)---文件自动分目录存储
- Lua的表(字典)
- LeetCode Ugly Number
- LeetCode Ugly Number
- Repeated DNA Sequences 解答
- Python二分查找详解
- JSP经典学习笔记(包含各种入门常用语法)
- JSP基本语句用法总结
- JSP学习之JavaBean用法分析
- JSP学习之Servlet用法分析
- JSP常见的文件操作小结
- js正则表达式验证大全(收集)
- js正则表达式基本语法(精粹)
- linux grep正则表达式与grep用法详解
- 正则表达式在IOS中的应用及IOS中三种正则表达式的使用与比较
- 写出高效率的正则表达式技巧总结
- ASP.NET设计FTP文件上传的解决方案
- asp将本地的文件上传到服务器
- asp.net上传文件到数据库的解决方案
- asp.net单文件带进度条上传的解决方案