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

时间:2022-03-07 02:22:01

问题描述:

把只包含因子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:

上面想法在非丑数上也花费时间去判断它,如何避免这种情况呢?即我们只考虑丑数而不考虑非丑数。