美文网首页
[刷题防痴呆] 0264 - 丑数 II (Ugly Numbe

[刷题防痴呆] 0264 - 丑数 II (Ugly Numbe

作者: 西出玉门东望长安 | 来源:发表于2022-03-12 00:16 被阅读0次

题目地址

https://leetcode.com/problems/ugly-number-ii/description/

题目描述

264. Ugly Number II

Write a program to find the n-th ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. 

Example:

Input: n = 10
Output: 12
Explanation: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first 10 ugly numbers.
Note:  

1 is typically treated as an ugly number.
n does not exceed 1690.

思路

  • heap + hashset.
  • 将2, 3, 5, 放入.
  • 然后不停往后计算. 乘以2, 3, 5. 用hashset判重.

关键点

  • 中间可能会溢出, 用long.
  • long to int: number.intValue().
  • int to long: Long.valueOf(2).

代码

  • 语言支持:Java
class Solution {
    public int nthUglyNumber(int n) {
        PriorityQueue<Long> pq = new PriorityQueue<>();
        Set<Long> set = new HashSet<>();
        
        List<Long> primes = new ArrayList<>();
        primes.add(Long.valueOf(2));
        primes.add(Long.valueOf(3));
        primes.add(Long.valueOf(5));
        
        for (int i = 0; i < 3; i++) {
            pq.offer(primes.get(i));
            set.add(primes.get(i));
        }
        
        Long number = Long.valueOf(1);
        for (int i = 1; i < n; i++) {
            number = pq.poll();
            for (int j = 0; j < 3; j++) {
                long temp = primes.get(j) * number;
                if (!set.contains(temp)) {
                    pq.offer(temp);
                    set.add(temp);
                }
            }
        }
        
        return number.intValue();
    }
}

相关文章

网友评论

      本文标题:[刷题防痴呆] 0264 - 丑数 II (Ugly Numbe

      本文链接:https://www.haomeiwen.com/subject/qqzqdrtx.html