LeetCode 313. Super Ugly Number(超级丑的数字)
2016-04-22 01:41
381 查看
原题网址: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
size
Note:
(1)
(2) The given numbers in
(3) 0 <
106, 0 <
1000.
方法:动态规划+最小堆。
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
primesof
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)
1is a super ugly number for any given
primes.
(2) The given numbers in
primesare in ascending order.
(3) 0 <
k≤ 100, 0 <
n≤
106, 0 <
primes[i]<
1000.
方法:动态规划+最小堆。
public class Solution { public int nthSuperUglyNumber(int n, int[] primes) { if (n<=1) return 1; int[] nums = new int ; 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]; } }
相关文章推荐
- HttpClient4 获取cookie
- 下载资料账号密码view
- web day14 web版简单注册登陆案例
- 枚举和注解
- linux下修改fstab的只读问题
- Path、Paths、Files
- Java学习(八)
- java中的IO流
- text-align:center与<CENTER>的区别
- linux 下载jdk 发生 (104) Connection reset by peer 错误 的解决办法
- 异常处理
- HDOJ(HDU) 1785 You Are All Excellent(角度运算)
- HDOJ(HDU) 1785 You Are All Excellent(角度运算)
- redis 存储自定义java对象有几种方式
- 蓝桥杯(Java) 基础练习 01子串
- 安卓新闻客户端的简单实现
- Spring MVC常用的注解类
- MVC模式
- 进程、线程、协程基本概念理解
- 蓝桥杯(Java) 基础练习 闰年判断