您的位置:首页 > 编程语言 > Java开发

java 求解第n个丑数

2016-03-27 21:27 549 查看
题目:

我们把只包含因子2,3和5的数称为丑数(Ugly Number),求从小到大的顺序第n的丑数,例如6,8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当作第1个丑数

第一种解法:最简单粗暴野蛮也是效率最低的一种解法是:

public class Solution {
public int GetUglyNumber_Solution(int index) {
int count = 0;
int i;
for(i=1;count<=index;i++){
if(isUgly(i))
count++;
}
return i;
}

public boolean isUgly(int n){
while(n%3==0)
n = n/3;
while(n%2==0)
n = n/2;
while(n%5==0)
n = n/5;
if(n==1)
return true;
else
return false;
}

}


第二种解法:空间换时间解法,假设一个数组存储好已经排序好的丑数,那么一个新的丑数的产生必定是数组里面的数乘以2,3或者乘以5,于是有了第二种解法

第二种解法:

public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index==0)
return 0;
int[] a = new int[index];
int count = 1;
a[0] = 1;
int index2 = 0;
int index3 = 0;
int index5 = 0;
while(count<index){
int min = min(a[index2]*2,a[index3]*3,a[index5]*5);
a[count] = min;
while(a[index2]*2<=a[count]) index2++;
while(a[index3]*3<=a[count]) index3++;
while(a[index5]*5<=a[count]) index5++;
count++;
}
int result = a[index-1];
return result;
}

public int min(int a,int b,int c){
int temp = a>b?b:a;
return temp>c?c:temp;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: