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

来源:互联网 发布:我的世界一键生成js 编辑:程序博客网 时间:2024/05/18 03:51

问题描述:

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

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

0 0
原创粉丝点击