编写一个程序,找出第 n
个丑数。
丑数就是只包含质因数 2, 3, 5
的正整数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12
是前 10 个丑数。
说明:
1
是丑数。n
不超过1690。
三指针法。
保证丑数是有序的自小到大排列的,每个丑数都能被枚举到。
class Solution {
public:
int nthUglyNumber(int n) {
if(n<=0){
return 0;
}
int dp[n+1];
memset(dp,0,sizeof(dp));
dp[0] = 1;
int p1 = 0;
int p2 = 0;
int p3 = 0;
for(int i=1;i<n;i++){
int n1 = dp[p1] * 2;
int n2 = dp[p2] * 3;
int n3 = dp[p3] * 5;
int minx = min(n1,min(n2,n3));
dp[i] = minx;
if(minx==n1){
p1++;
}
if(minx==n2){
p2++;
}
if(minx==n3){
p3++;
}
}
return dp[n-1];
}
};