本文將為大家詳細介紹“java如何查出丑數”,內容步驟清晰詳細,細節處理妥當,而小編每天都會更新不同的知識點,希望這篇“java如何查出丑數”能夠給你意想不到的收獲,請大家跟著小編的思路慢慢深入,具體內容如下,一起去收獲新知識吧。
編寫一個程序,找出第 n
個丑數。
丑數就是只包含質因數 2, 3, 5
的正整數。
示例:
輸入: n = 10 輸出: 12 解釋: 是前 10 個丑數。
說明:
1
是丑數。
n
不超過1690。
答案:
1public int nthUglyNumber(int n) {
2 if (n <= 1)
3 return n;
4 int t2 = 0, t3 = 0, t5 = 0;
5 int[] k = new int[n];
6 k[0] = 1;
7 for (int i = 1; i < n; i++) {
8 k[i] = Math.min(k[t2] * 2, Math.min(k[t3] * 3, k[t5] * 5));
9 if (k[i] == k[t2] * 2)
10 t2++;
11 if (k[i] == k[t3] * 3)
12 t3++;
13 if (k[i] == k[t5] * 5)
14 t5++;
15 }
16 return k[n - 1];
17}
解析:
丑數除了第一個是0以外,其他的都可以這樣表示
1*(2,3,5),
2*(2,3,5),
3*(2,3,5),
4*(2,3,5),
……………………
題目中說要找到第n個丑數,這n個丑數都是按照從小到大的順序查找的。所以每次查找的時候都是找最小的。下面再來看一種解法
1public int nthUglyNumber(int n) {
2 if (n == 1)
3 return 1;
4 PriorityQueue<Long> q = new PriorityQueue();
5 q.add(1L);
6 for (long i = 1; i < n; i++) {
7 long tmp = q.poll();
8 while (!q.isEmpty() && q.peek() == tmp)
9 tmp = q.poll();
10 q.add(tmp * 2);
11 q.add(tmp * 3);
12 q.add(tmp * 5);
13 }
14 return q.poll().intValue();
15}
PriorityQueue默認是一個小頂堆的優先隊列,poll表示的是移除最頂端的元素,也是最小的元素,然后再用最小的元素分別和2,3,5進行相乘,add方法加入到隊列的時候又會進行排序,保證最頂端的元素是最小的。
Java主要應用于:1. web開發;2. Android開發;3. 客戶端開發;4. 網頁開發;5. 企業級應用開發;6. Java大數據開發;7.游戲開發等。
感謝您能讀到這里,小編希望您對“java如何查出丑數”這一關鍵問題有了從實踐層面最深刻的體會,具體使用情況還需要大家自己動手實踐使用過才能領會,如果想閱讀更多相關內容的文章,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。