剑指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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章