您的位置:首页 > 理论基础 > 数据结构算法

丑数

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;
}
//辅助数组,大小为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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息