LeetCode 313. Super Ugly Number(超级丑的数字)
来源:互联网 发布:电子软件发展方向 编辑:程序博客网 时间:2024/05/16 14:08
原题网址:https://leetcode.com/problems/super-ugly-number/
Write a program to find the nth super ugly number.
Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes
of size k
. For example, [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32]
is the sequence of the first 12 super ugly numbers given primes
= [2, 7, 13, 19]
of size 4.
Note:
(1) 1
is a super ugly number for any given primes
.
(2) The given numbers in primes
are in ascending order.
(3) 0 < k
≤ 100, 0 < n
≤ 106, 0 < primes[i]
< 1000.
使用最小堆的最直接的思路,但无法通过时限要求:
public class Solution { public int nthSuperUglyNumber(int n, int[] primes) { PriorityQueue<Long> heap = new PriorityQueue<>(); for(int prime : primes) heap.offer((long)prime); long ugly = 1; for(int i = 1; i < n; i++) { long prev = ugly; ugly = heap.poll(); while (ugly == prev) ugly = heap.poll(); for(int prime : primes) heap.offer(ugly * prime); } return (int)ugly; }}
方法:动态规划+最小堆。
public class Solution { public int nthSuperUglyNumber(int n, int[] primes) { if (n<=1) return 1; int[] nums = new int[n]; nums[0] = 1; int[] pos = new int[primes.length]; PriorityQueue<Integer> minHeap = new PriorityQueue<>(new Comparator<Integer>() { @Override public int compare(Integer i1, Integer i2) { return Integer.compare(nums[pos[i1]] * primes[i1], nums[pos[i2]] * primes[i2]); } }); for(int i=0; i<primes.length; i++) minHeap.add(i); for(int i=1; i<n; i++) { do { int min = minHeap.poll(); nums[i] = nums[pos[min]] * primes[min]; pos[min] ++; minHeap.offer(min); } while (nums[i]==nums[i-1]); } return nums[n-1]; }}
0 0
- LeetCode 313. Super Ugly Number(超级丑的数字)
- leetcode 313. Super Ugly Number-超级丑数
- LeetCode-313. Super Ugly Number (JAVA)超级丑数
- leetcode 313. Super Ugly Number 超级丑数
- 518.Super Ugly Number-超级丑数(中等题)
- 超级丑数(Super Ugly Number)
- LeetCode 263. Ugly Number(丑数字)
- (LeetCode) Ugly Number --- 丑数字
- LeetCode 264. Ugly Number II(丑数字)
- 313. Super Ugly Number LeetCode
- leetcode 313. Super Ugly Number
- LeetCode 313. Super Ugly Number
- LeetCode *** 313. Super Ugly Number
- LeetCode-313.Super Ugly Number
- Leetcode 313. Super Ugly Number
- [leetcode] 313. Super Ugly Number
- 【LeetCode】 313. Super Ugly Number
- leetcode 313. Super Ugly Number
- VM虚拟机的复制和安装windows时分区
- 枚举和注解
- 下载资料账号密码view
- linux下修改fstab的只读问题
- HttpClient4 获取cookie
- LeetCode 313. Super Ugly Number(超级丑的数字)
- mosquitto 设置用户和密码
- Java中的多线程
- Spark的三种分布式部署模式:Standalone, Mesos,Yarn
- eclipse里访问tomcat首页出现404错误解决之法
- 增强for循环、静态导入、可变参数、asList()方法
- ubuntu 16.10下OpenVPN环境搭建过程
- 网络编程基础知识
- Power of Four leetcode 342