解法一
参考题解:https://leetcode-cn.com/problems/chou-shu-lcof/solution/mian-shi-ti-49-chou-shu-dong-tai-gui-hua-qing-xi-t/
class Solution {
public int nthUglyNumber(int n) {
// dp[i]表示第i+1个丑数
int[] dp = new int[n];
dp[0] = 1;
int a = 0, b = 0, c = 0;
int x1 = dp[a] * 2;
int x2 = dp[b] * 3;
int x3 = dp[c] * 5;
for (int i = 1; i < n; ++i) {
dp[i] = Math.min(Math.min(x1, x2), x3);
// 要分开判断, 防止重复的值多次计入
if (dp[i] == x1) {
++a;
x1 = dp[a] * 2;
}
if (dp[i] == x2) {
++b;
x2 = dp[b] * 3;
}
if (dp[i] == x3) {
++c;
x3 = dp[c] * 5;
}
}
return dp[n - 1];
}
}