LeetCode264-丑数II

题目链接

英文链接:https://leetcode.com/problems/ugly-number-ii/

中文链接:https://leetcode-cn.com/problems/ugly-number-ii/

题目详述

编写一个程序,找出第 n 个丑数。

丑数就是只包含质因数 2, 3, 5 的正整数。

示例:

1
2
3
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。

说明:

  1. 1 是丑数。
  2. n 不超过1690。

题目详解

  • LeetCode263-丑数 是判断给定的数是否为丑数,本题是求第 n 个丑数。
  • 动态规划的经典问题,维护三个指针,取较小者进行状态转移。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class LeetCode_00264 {

public int nthUglyNumber(int n) {
int[] dp = new int[n];
dp[0] = 1;
int i = 0, j = 0, k = 0;
for (int idx = 1; idx < n; ++idx) {
int t = Math.min(dp[i] * 2, Math.min(dp[j] * 3, dp[k] * 5));
dp[idx] = t;
if (dp[i] * 2 == t) ++i;
if (dp[j] * 3 == t) ++j;
if (dp[k] * 5 == t) ++k;
}
return dp[n - 1];
}
}