给你一个整数
n
,请你找出并返回第n
个 丑数 。丑数 就是只包含质因数
2
、3
和/或5
的正整数。
示例 1:
输入:n = 10 输出:12 解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2:
输入:n = 1 输出:1 解释:1 通常被视为丑数。
/**
三指针超吊!
p2,p3,p5表示位置[p2,p3,p5]的值分别可以乘2,3,5
如果当前位置已经乘过2,3,5其中之一,则将对应的指针+1
每次比较取[p2,p3,p5]的值分别乘2,3,5的最小值作为当前丑数
**/
class Solution {
public int nthUglyNumber(int n) {
long[] dp=new long[n+1];
dp[1]=1L;
int i=2,p2=1,p3=1,p5=1;
while(i<=n){
long num2=dp[p2]*2,num3=dp[p3]*3,num5=dp[p5]*5;
dp[i]=Math.min(Math.min(num2,num3),num5);
if(dp[i]==num2){
p2++;
}
if(dp[i]==num3){
p3++;
}
if(dp[i]==num5){
p5++;
}
i++;
}
return (int)dp[n];
}
}