4. 丑數 II

描述

設計一個算法,找出只含素因子2,3,5 的第 n 大的數。
符合條件的數如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...

注意事項

我們可以認為1也是一個丑數

樣例

如果n = 9, 返回 10

挑戰

要求時間復雜度為O(nlogn)或者O(n)

思路

第一個最小數是1,將1乘以2,3,5往PriorityQueue里丟,從PriorityQueue中拋出最小值然后再乘以2,3,5,再加入PriorityQueue和已有元素進行比較,再拋出最小值乘以2,3,5往回丟,如此重復n 次操作;除此之外還需要一個hash表來去重,因為2 * 3 = 6, 而3 * 2也會出現6
注:
集合類型(List,Map,Set)要使用包裝類型

代碼

  1. O(nlogn) HashMap + Heap
    在Java中PriorityQueue會自動把加入其中的數字從小到大排序
class Solution {
    /**
     * @param n an integer
     * @return the nth prime number as description.
     */
    public int nthUglyNumber(int n) {
        Queue<Long> Q = new PriorityQueue<Long>();
        HashSet<Long> inQ = new HashSet<Long>();
        Long[] primes = new Long[3];
        primes[0] = Long.valueOf(2);
        primes[1] = Long.valueOf(3);
        primes[2] = Long.valueOf(5);
        for (int i = 0; i < 3; i++) {
            Q.add(primes[i]);
            inQ.add(primes[i]);
         }
        // 第一個數
        Long number = Long.valueOf(1);
        for (int i = 1; i < n; i++) {
            // 從第二個數開始拋出 n-1 次
            number = Q.poll();
            for (int j = 0; j < 3; j++) {
                if (!inQ.contains(primes[j] * number)) {
                    Q.add(number * primes[j]);
                    inQ.add(number * primes[j]);
                }
            }
        }
        return number.intValue();
    }
}

相關知識點

intValue()的用法

  1. intValue()是java.lang.Number類的方法,Number是一個抽象類。Java中所有的數值類都繼承它。也就是說,不單是Integer有intValue方法,Double,Long等都有此方法。
  2. 此方法的意思是:輸出int數據。每個數值類中具體的實現是不同的。例如:
    Float類和Double類的intValue方法,就是丟掉了小數位,而Long的intValue方法又不一樣的
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 題目 描述 設計一個算法,找出只含素因子2,3,5 的第 n 大的數。符合條件的數如:1, 2, 3, 4, 5,...
    悠揚前奏閱讀 973評論 0 0
  • 題目描述 設計一個算法,找出只含素因子2,3,5 的第 n 大的數。1也是一個丑數。 思路 方法一每個丑數都是2....
    Yui丶西米大人閱讀 248評論 0 0
  • 3.10 69.給出一棵二叉樹,返回其節點值的層次遍歷(逐層從左往右訪問) 二叉樹的層次遍歷樣例給一棵二叉樹 {3...
    mytac閱讀 1,104評論 3 3
  • 題目前的數字是對應的lintcode的題目序號 14.二分查找 給定一個排序的整數數組(升序)和一個要查找的整數t...
    mytac閱讀 713評論 1 2
  • 現在的孩子是幸福的,出行交通便捷多樣,輕松松便能去往目的地。從前的日子,連公交車都是很少的。 馬路上頗為空敞,等候...
    鄰院兒的擺擺閱讀 730評論 0 2