您的位置:首页 > 其它

LeetCode Ugly Number II

2015-09-15 06:21 459 查看
原题俩接在这里:https://leetcode.com/problems/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.

题解:

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];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: