2022-7-9 剑指offer-优先队列-hashmap

剑指 Offer 49. 丑数

难度中等

我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

 1 class Solution {
 2     public int nthUglyNumber(int n) {
 3         PriorityQueue<Integer> queue=new PriorityQueue<>();
 4         Set<Integer> set=new HashSet<>();
 5         if (n==1) return 1;
 6         queue.offer(1);
 7         set.add(1);
 8         for (int i=0;i<n-1;i++){
 9             int temp=queue.poll();
10             if (temp<Integer.MAX_VALUE/2&&!set.contains(temp*2)) {
11                 queue.offer(temp*2);
12                 set.add(temp*2);
13             }
14             if (temp<Integer.MAX_VALUE/3&&!set.contains(temp*3)) {
15                 queue.offer(temp*3);
16                 set.add(temp*3);
17             }
18             if (temp<Integer.MAX_VALUE/5&&!set.contains(temp*5)) {
19                 queue.offer(temp*5);
20                 set.add(temp*5);
21             }
22 
23         }
24         return queue.poll();
25     }
26 }

思路:丑数总是由丑数*2 *3 *5诞生的,可以用优先队列存储丑数,构造新的丑数,主要要用hashmap去重和int溢出

posted on 2022-07-09 20:01  阿ming  阅读(24)  评论(0编辑  收藏  举报

导航