今天刷题目,遇到了Ugly Number,初一看,这题目也太水了吧,仔细看了看,才发现内有玄机啊。看了前辈们的几篇文章,才知道是微软的面试题目,吓尿了。
小白的做法可能是通过遍历来求ugly number,但是这样做时间上消耗很大,肯定也不是正解。利用ugly number的特点来求解问题才是本真,也是这道题目有意思的地方。
ugly number的Accept的代码如下:
bool isUgly(int num) {
if(num==0) return false;
while(num%2==0)
num=num/2;
while(num%3==0)
num=num/3;
while(num%5==0)
num=num/5;
return (num==1) ? true:false;
}
ugly number II 的代码如下:
int Min(int a, int b, int c)
{
int temp = (a < b ? a : b);
return (temp < c ? temp : c);
}
int nthUglyNumber(int n) {
int a[10000]={0};
a[1]=1;
int index2=0;
int index3=0;
int index5=0;
int index=1;
while(index<n)
{
int val=Min(a[index2]*2,a[index3]*3,a[index5]*5);
if (val == a[index2]*2)
++index2;
if (val == a[index3]*3)
++index3;
if (val == a[index5]*5)
++index5;
a[index++] = val;
}
return a[n-1];
}
求第N大的ugly number的数的方法copy了http://blog.csdn.net/coder_xia/article/details/6707600
点击打开链接中的方法,方法很巧妙,以后自己还得仔细研究研究,与你我共勉,编程之路,一起加油!