您的位置:首页 > 职场人生

剑指Offer:面试题34——丑数(java实现)

2016-07-09 10:13 676 查看
问题描述:

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

思路1:(显然是比较耗时的)

直接去判断每个整数是不是丑数,然后找到第N个小的数。(牛客网提交超时)

public int GetUglyNumber_Solution(int index) {

if(index <= 0){
return 0;
}

int number = 0;
int found = 0;
while(found < index){
number++;

if(is_UglyNumber(number)){
found++;
}

}
return number;
}

boolean is_UglyNumber(int n){

while(n % 2 == 0){
n /= 2;
}

while(n % 3 == 0){
n /= 3;
}

while(n % 5 == 0){
n /= 5;
}

return (n == 1) ? true : false;
}


思路2:

上面想法在非丑数上也花费时间去判断它,如何避免这种情况呢?即我们只考虑丑数而不考虑非丑数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: