剑指 Offer 49. 丑数

Offer_49

题目详情

解法一:小根堆+哈希表/HashSet

  • 根据丑数的定义,如果a是丑数,那么a2, a3以及a*5都是丑数
  • 可以使用小根堆存储按照从小到大排序的丑数。

package com.walegarrett.offer;

import java.util.HashMap;
import java.util.PriorityQueue; /**
* @Author WaleGarrett
* @Date 2021/2/8 21:39
*/ /**
* 题目详情:编写一个程序,找出第 n 个丑数。
* 丑数就是质因数只包含 2, 3, 5 的正整数。
*/
public class Offer_49 {
public int nthUglyNumber(int n) {
PriorityQueue<Long>queue = new PriorityQueue<>();
HashMap<Long,Integer>map = new HashMap<>();
queue.offer(1L);
int cnt = 0;
long now = 1;
while(cnt < n){
now = queue.poll();
if(!map.containsKey(now*2)){
queue.offer(now * 2);
map.put(now*2, 1);
}
if(!map.containsKey(now*3)){
queue.offer(now * 3);
map.put(now*3, 1);
}
if(!map.containsKey(now*5)){
queue.offer(now * 5);
map.put(now*5, 1);
}
cnt++;
}
return (int)now;
}
}

解法二:动态规划

/**

 * 解法二:动态规划
*/
class Offer_49_2 {
public int nthUglyNumber(int n) {
int i2=0,i3=0,i5=0;
int now = 0;
int[] nums = new int[n];
nums[0] = 1;
for(int i=1;i<n;i++){
nums[i] = Math.min(nums[i2] * 2, Math.min(nums[i3] * 3, nums[i5] * 5));
if(nums[i] == nums[i2] * 2)
i2++;
if(nums[i] == nums[i3] * 3)
i3++;
if(nums[i] == nums[i5] * 5)
i5++;
}
return nums[n-1];
}
}

最新文章

  1. POJ 2225 / ZOJ 1438 / UVA 1438 Asteroids --三维凸包,求多面体重心
  2. 装13失败后的逆袭(ComboBox的联动)
  3. MAC下彻底解决mysql无法插入和显示中文
  4. iPhone手机安全指南
  5. ubuntu实用技巧
  6. POJ 2101
  7. EIGRP默认路由分发的四种方法
  8. 【BZOJ】【1529】 【POI2005】ska Piggy banks
  9. jbpm与spring hibernate struts整合
  10. java 保留小数点后N位数(若干位),几种实现的方式总结
  11. iOS10适配——相机,通讯录,麦克风等权限设置
  12. 【模版 Floyd最小环】
  13. C\C++学习笔记 1
  14. Django 中间件 请求前
  15. sqlserver 级联删除、级联更新
  16. 五、regularized线性回归练习(转载)
  17. 交换机与VLAN
  18. Android中获取屏幕长宽的方法
  19. 2D Polygons( Poygon) CGAL 4.13 -User Manual
  20. 一步一步学习IdentityServer3 (5)

热门文章

  1. Git命令回退代码并同步到远程仓库
  2. 系统找不到C:\ProgramData\Oracle\Java\javapath\java.exe问题及解决方案
  3. 3.keepalived+脚本实现nginx高可用
  4. docker的企业级仓库-harbor
  5. woj1009 最短路 The Legend of Valiant Emigration
  6. 地址解析协议ARP与逆地址解析协议RARP
  7. confirm() :带有指定消息和 OK 及取消按钮的对话框
  8. 12.tomcat7切换tomcat8导致cookie异常
  9. Linux Centos7发送QQ邮件
  10. 树莓派 4B 入门教程