丑数
2017-11-16 09:07
211 查看
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index<=0){
return 0;
}
int uglyCount=0;
int num=0;
while(uglyCount<index){
++num;
if(isUglyNumber(num)){
++uglyCount;
}
}
return num;
}
private boolean isUglyNumber(int num){
while(num%2==0){
num=num/2;
}
while(num%3==0){
num/=3;
}
while(num%5==0){
num/=5;
}
return (num==1)?true:false;
}
}
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index<=0){
return 0;
}
int uglyCount=0;
int num=0;
while(uglyCount<index){
++num;
if(isUglyNumber(num)){
++uglyCount;
}
}
return num;
}
private boolean isUglyNumber(int num){
while(num%2==0){
num=num/2;
}
while(num%3==0){
num/=3;
}
while(num%5==0){
num/=5;
}
return (num==1)?true:false;
}
}
public class Solution { //用空间换时间的方法 public int GetUglyNumber_Solution(int index) { if(index<=0){ return 0; } //辅助数组,大小为index int uglyArr[]=new int[index]; //题目中描述的第一个丑数为1 uglyArr[0]=1; //下一个丑数的位置 int nextUgly=1; int index2=0; int index3=0; int index5=0; int ugly2=uglyArr[index2]; int ugly3=uglyArr[index3]; int ugly5=uglyArr[index5]; //找到的丑数的数目还不满足要求 while(nextUgly<index){ int min=Min(ugly2*2,ugly3*3,ugly5*5); uglyArr[nextUgly]=min; while(uglyArr[index2]*2<=uglyArr[nextUgly]){ ugly2=uglyArr[++index2]; } while(uglyArr[index3]*3<=uglyArr[nextUgly]){ ugly3=uglyArr[++index3]; } while(uglyArr[index5]*5<=uglyArr[nextUgly]){ ugly5=uglyArr[++index5]; } ++nextUgly; } return uglyArr[nextUgly-1]; } //求三个数的最小值的Min函数 private int Min(int num1,int num2,int num3){ int min=num1<num2?num1:num2; return min<num3?min:num3; } }