Qustion 2: Ugly Number
An ugly number is a positive integer whose prime factors are limited to 2, 3, and 5.
Given an integer n, return the 𝒏𝒕𝒉 ugly number.
1.代码如下
class Solution {
public int nthUglyNumber(int n) {
int a=0,b=0,c=0;
int[]dp=new int[n];
dp[0]=1;
for(int i=1;i<n;i++){
int n2=dp[a]*2,n3=dp[b]*3,n5=dp[c]*5;
dp[i]=Math.min(Math.min(n2,n3),n5);
if(dp[i]==n2) a++;
if(dp[i]==n3)b++;
if(dp[i]==n5) c++;
}
return dp[n-1];
}
}
2.思路分析
因此,可设置指针 a,b,c指向首个丑数(即 1 ),循环根据递推公式得到下个丑数,并每轮将对应指针执行 +1即可。
4.复杂度分析:
时间复杂度 O(N) : 其中 N=n ,动态规划需遍历计算 dp列表。
空间复杂度 O(N) : 长度为 N 的 dp 列表使用 O(N) 的额外空间。