剑指offer 49. 丑数
题目描述
解题思路
参考题解:剑指 Offer 49. 丑数(动态规划,清晰图解)
class Solution {
public int nthUglyNumber(int n) {
//定义:dp[i] 表示第i + 1个丑数
int[] dp = new int[n];
dp[0] = 1;
//三指针,dp[a]是第一个乘2大于dp[i]的元素,dp[b]是第一个乘3大于dp[i]的元素,dp[c]是第一个乘5大于dp[i]的元素
int a = 0, b = 0, c = 0;
for (int i = 1; i < n; i++) {
int n1 = dp[a] * 2, n2 = dp[b] * 3, n3 = dp[c] * 5;
dp[i] = Math.min(Math.min(n1, n2), n3);
if (dp[i] == n1) a++;
if (dp[i] == n2) b++;
if (dp[i] == n3) c++;
}
return dp[n - 1];
}
}