劍指offer 醜數

把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因爲它包含因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。

自己的方法超時了,看到了一段牛逼代碼

public int GetUglyNumber_Solution(int index) {
        if (index < 7) return index;
        int[] re = new int[index];
        re[0] = 1;
        int t2 = 0, t3 = 0, t5 = 0;
        for (int i = 0; i < index; i++) {
            re[i] = Math.min(re[t2] * 2, Math.min(re[t3] * 3, re[t5] * 5));
            if (re[i] == re[t2] * 2) t2++;
            if(re[i] == re[t3]*3) t3++;
            if(re[i] == re[t5]*5) t5++;
        }
        return re[index - 1];
    }

三個if輕鬆去重,很給力,感覺空間複雜度很高,其實o(n)也還好

發佈了142 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章