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

问题描述:

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

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

原文地址:https://www.cnblogs.com/wenbaoli/p/5655698.html