Skip to content

Commit f69e2ef

Browse files
committed
✨ leetcode 第264题,新增三指针法。
1 parent 65ac59a commit f69e2ef

1 file changed

Lines changed: 29 additions & 4 deletions

File tree

leetcode/src/main/java/com/fuyd/other/Solution264.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
/**
44
* 264. 丑数 II
55
* 编写一个程序,找出第 n 个丑数。
6-
*
6+
* <p>
77
* 丑数就是只包含质因数 2, 3, 5 的正整数。
8-
*
8+
* <p>
99
* 示例:
10-
*
10+
* <p>
1111
* 输入: n = 10
1212
* 输出: 12
1313
* 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
1414
* 说明:
15-
*
15+
* <p>
1616
* 1 是丑数。
1717
* n 不超过1690。
1818
*
@@ -38,6 +38,31 @@ public int nthUglyNumber(int n) {
3838
return -1;
3939
}
4040

41+
/**
42+
* 三指针法
43+
* 时间复杂度:O(n)
44+
* 空间复杂度:O(n)
45+
*/
46+
public int nthUglyNumber2(int n) {
47+
int[] dp = new int[n];
48+
dp[0] = 1;
49+
int i2 = 0, i3 = 0, i5 = 0;
50+
for (int i = 1; i < n; i++) {
51+
int min = Math.min(dp[i2] * 2, Math.min(dp[i3] * 3, dp[i5] * 5));
52+
if (min == dp[i2] * 2) {
53+
i2++;
54+
}
55+
if (min == dp[i3] * 3) {
56+
i3++;
57+
}
58+
if (min == dp[i5] * 5) {
59+
i5++;
60+
}
61+
dp[i] = min;
62+
}
63+
return dp[n - 1];
64+
}
65+
4166
public static boolean isUgly(int num) {
4267
if (num < 1) {
4368
return false;

0 commit comments

Comments
 (0)