劍指Offer學習-面試題49:醜數

	/**
     * 醜數
     * 我們把只包含因子2,3,5的數稱作醜數,從小到大順序求第number個醜數
     * <p>
     * 三指針
     *
     * @param number
     * @return
     */
    public int getUglyNumber(int number) {
        if (number < 0) return 0;
        int a = 1;
        int b = 1;
        int c = 1;
        int min = 1;
        for (int i = 2; i <= number; i++) {
            min = Math.min(Math.min(a * 2, b * 3), c * 5);
            if (min == a * 2) a++;
            if (min == b * 3) b++;
            if (min == c * 5) c++;
        }
        return min;
    }

    /**
     * 暴力解法
     *
     * @param number
     * @return
     */
    public int getUglyNumber1(int number) {
        if (number < 0) return 0;
        int count = 1;
        int res = 1;
        while (count < number) {
            res++;
            if (isUgly(res)) {
                count++;
            }
        }
        return res;
    }

    /**
     * 判斷一個數是不是醜數
     *
     * @param number
     * @return
     */
    public boolean isUgly(int number) {
        while (number % 2 == 0) number /= 2;
        while (number % 3 == 0) number /= 3;
        while (number % 5 == 0) number /= 5;
        return number == 1;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章