
class Solution {
public:
int min(int a,int b,int c)
{
if(a<=b&&a<=c)
return a;
else if(b<=a&&b<=c)
return b;
else
return c;
}
int nthUglyNumber(int n)
{
if(n == 0)
return -1;
int*ret = new int[n]();
ret[0] = 1;
int i;
int a = 0,b = 0,c = 0;
if(n <= 6)
return n;
for(i = 1;i < n;++i)
{
ret[i] = min(ret[a]*2,ret[b]*3,ret[c]*5);
if(ret[i]%2 == 0)
a++;
if(ret[i]%3 == 0)
b++;
if(ret[i]%5 == 0)
c++;
}
return ret[n-1];
}
};

该博客介绍了如何使用C++编程实现寻找第n个丑数的算法。代码中定义了一个Solution类,包含两个方法:min用于找到三个数中的最小值,nthUglyNumber用于计算第n个丑数。该算法通过维护三个指针,分别对应2、3、5的倍数,逐步更新结果。
2603

被折叠的 条评论
为什么被折叠?



