首先可以确认一个事实,所有丑数可以由1变来,丑数*2、3、5仍是丑数,所以设立三个数组,每次进行递推,取最小的那个值为最近的丑数,递推完记得指针加1。有一个细节是,abc它们各自乘完之后可能结果一样,此时也不用担心,因为乘完后各自指针都会加1
class Solution {
public:
int nthUglyNumber(int n) {
long long a=1,b=1,c=1;
long long chou[2000];
long long ans=0;
chou[1]=1;
if(n==1)return 1;
for(int i=2;;i++)
{
chou[i]=min(min(chou[a]*2,chou[b]*3),chou[c]*5);
if(chou[i]==chou[a]*2)a++;
if(chou[i]==chou[b]*3)b++;
if(chou[i]==chou[c]*5)c++;
if(i==n)return chou[i];
}
}
};