题目:
题解:动态规划(三指针)
1. 解释一:
2. 解释二:
3. 解释三:
4. 解释四:
代码:动态规划(三指针)
public class 面试题49 {
public static int nthUglyNumber(int n) {
int a = 0; // 索引 a 指向 0
int b = 0; // 索引 b 指向 0
int c = 0; // 索引 c 指向 0
int dp[] = new int[n]; // dp[i] 代表第 i + 1 个丑数
dp[0] = 1; // 第一个丑数为 1
for(int i = 1; i < n; i++)
{
int n2 = dp[a] * 2;
int n3 = dp[b] * 3;
int n5 = dp[c] * 5;
dp[i] = Math.min(Math.min(n2, n3), n5);
if(dp[i] == n2)
{
a++; // 索引 a 向后移动一个元素
}
if(dp[i] == n3)
{
b++; // 索引 b 向后移动一个元素
}
if(dp[i] == n5)
{
c++; // 索引 c 向后移动一个元素
}
}
return dp[n - 1]; // 返回第 n 个丑数
}
public static void main(String[] args) {
int n = 10;
int res = nthUglyNumber(n);
System.out.println(res);
}
}