Ugly Number II
Write a program to find the n
-th ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12
is the
sequence of the first 10
ugly numbers.
Note that 1
is typically treated as an ugly number.
class Solution {
public:
int nthUglyNumber(int n) {
/*
超时
if(n==1)
return 1;
int k=1;
int tmp;
int ans=1;
while(k<n)
{
tmp=++ans;
while(1)
{
while(tmp%2==0)
tmp/=2;
while(tmp%3==0)
tmp/=3;
while(tmp%5==0)
tmp/=5;
if(tmp==1)
break;
else
tmp=++ans;
}
k++;
}
return ans;
*/
//记住14不是的,不能用3个index,然后遍历比较
//因为每个丑数都是前面的丑数*2,*3,*5得到,所以要从以前的数中拿取
int *ans=new int[n+1];
ans[0]=1;
int index=1;
int i=0,j=0,k=0;
while(index<n)
{
ans[index]=min(ans[i]*2,min(ans[j]*3,ans[k]*5));
if(ans[index]==ans[i]*2)
i++;
if(ans[index]==ans[j]*3)
j++;
if(ans[index]==ans[k]*5)
k++;
index++;
}
return ans[index-1];
}
};