美文网首页
AC 剑指 Offer 49. 丑数

AC 剑指 Offer 49. 丑数

作者: itbird01 | 来源:发表于2022-03-26 08:19 被阅读0次

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

    示例:
    输入: n = 10
    输出: 12
    解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
    说明:
    1 是丑数。
    n 不超过1690。

    import java.util.HashSet;
    import java.util.PriorityQueue;
    
    class Solution {
        /**
         * @Title: nthUglyNumber
         * @Description: 最小堆解法
         * @author: itbird
         * @date 2022年3月21日 下午7:40:57
         * @param n
         * @return int 时间复杂度: O(nlogn) 空间复杂度: O(n)
         */
        public int nthUglyNumber(int n) {
            int[] factors = new int[] { 2, 3, 5 };
            HashSet<Long> set = new HashSet<>();
            PriorityQueue<Long> queue = new PriorityQueue<>();
            queue.offer(1L);
            set.add(1L);
            int result = 1;
            for (int i = 0; i < n; i++) {
                long temp = queue.poll();
                result = (int) temp;
                for (int j = 0; j < factors.length; j++) {
                    long temp1 = factors[j] * temp;
                    if (set.add(temp1)) {
                        queue.offer(temp1);
                    }
                }
            }
            return result;
        }
    }
    

    相关文章

      网友评论

          本文标题:AC 剑指 Offer 49. 丑数

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