Link: https://leetcode.cn/problems/ugly-number-ii/
Question
difficulty: mid
adj diff: 4
An ugly number is a positive integer whose prime factors are limited to 2, 3, and 5.
Given an integer n, return the nth ugly number.
Example 1:
Input: n = 10
Output: 12
Explanation: [1, 2, 3, 4, 5, 6, 8, 9, 10, 12] is the sequence of the first 10 ugly numbers.
Example 2:
Input: n = 1
Output: 1
Explanation: 1 has no prime factors, therefore all of its prime factors are limited to 2, 3, and 5.
Constraints:
1 <= n <= 1690
Code
public int nthUglyNumber(int n) {
int[] dp = new int[n + 1];
dp[1] = 1;
int p2 = 1;
int p3 = 1;
int p5 = 1;
for (int i = 2; i <= n; i++) {
int nextUgly = Math.min(Math.min(dp[p2] * 2, dp[p3] * 3), dp[p5] * 5);
dp[i] = nextUgly;
if (dp[p2] * 2 == nextUgly) {
p2++;
}
if (dp[p3] * 3 == nextUgly) {
p3++;
}
if (dp[p5] * 5 == nextUgly) {
p5++;
}
}
return dp[n];
}