264. Ugly Number II
来源:互联网 发布:ubuntu装中文输入法 编辑:程序博客网 时间:2024/06/13 01:09
Write a program to find the n
-th ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12
is the sequence of the first 10
ugly numbers.
Note that 1
is typically treated as an ugly number.
Hint:
- The naive approach is to call
isUgly
for every number until you reach the nth one. Most numbers are not ugly. Try to focus your effort on generating only the ugly ones. - An ugly number must be multiplied by either 2, 3, or 5 from a smaller ugly number.
- The key is how to maintain the order of the ugly numbers. Try a similar approach of merging from three sorted lists: L1, L2, and L3.
- Assume you have Uk, the kth ugly number. Then Uk+1 must be Min(L1 * 2, L2 * 3, L3 * 5).
Solution 1 DP
public int nthUglyNumber(int n) { int ugly[] = new int[n]; ugly[0] = 1; int p2 = 0, p3 = 0, p5 = 0; for(int i = 1; i < n; i++){ ugly[i] = Math.min(Math.min(ugly[p2] * 2, ugly[p3] * 3), ugly[p5] * 5); if(ugly[i] == ugly[p2] * 2) p2++; if(ugly[i] == ugly[p3] * 3) p3++; if(ugly[i] == ugly[p5] * 5) p5++; } return ugly[n - 1]; }
Solution 2
// poll always return the least element in the queuepublic static int nthUglyNumber2(int n) { if(n==1) return 1; PriorityQueue<Long> q = new PriorityQueue(); q.add(1l); for(long i=1; i<n; i++) { long tmp = q.poll(); while(!q.isEmpty() && q.peek()==tmp) tmp = q.poll(); q.add(tmp*2); q.add(tmp*3); q.add(tmp*5); } return q.poll().intValue();}
0 0
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II**
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- 264. Ugly Number II
- HDOJ-----2068错排与组合
- Unbuntu登陆界面用户丢失寻回记
- 字符设备驱动--外部中断
- Java并发:如何编写线程安全的代码
- 利用python pil 实现给图片上添加文字
- 264. Ugly Number II
- Java并发:可重入与线程安全
- 实习总结系列1
- 利用Percona xtrabackup恢复误删除数据
- Spring 事务管理
- 平面与空间简单分割原理
- 纯css导航条
- 文件上传的方式以及对应的配置
- 一些PHP性能优化