题目

题链:剑指 Offer 49. 丑数

题解

官方题解:丑数
解法一:小根堆
第一个数是1、后面就是每次使用2、3、5乘以当前最小的数即可。比如先是1,使用2,3,5乘后小根堆里就有1、2、3、5,然后再用2乘以2、3、5就是有1、2、3、5、4、6、10因为是使用小根堆存的所以会自动排好序,但有可能出现重复的数、所以我们可以使用hash去重、每次添加的时候判断这个元素有没有重复。

class Solution {public int nthUglyNumber(int n) {PriorityQueue<Long> queue = new PriorityQueue<>();queue.offer(1L);HashSet<Long> set = new HashSet<>();set.add(1L);int res = 1;int[] arr = {2,3,5};for (int i = 0; i < n; i++) {long cur = queue.poll();res = (int)cur;for (int a : arr) {if (set.add(a*cur)){queue.add(a*cur);}}}return res;}
}

解法二:动态规划

class Solution {public int nthUglyNumber(int n) {int[] dp = new int[n + 1];dp[1] = 1;int p2 = 1, p3 = 1, p5 = 1;for (int i = 2; i <= n; i++) {int num2 = dp[p2] * 2, num3 = dp[p3] * 3, num5 = dp[p5] * 5;dp[i] = Math.min(Math.min(num2, num3), num5);if (dp[i] == num2) {p2++;}if (dp[i] == num3) {p3++;}if (dp[i] == num5) {p5++;}}return dp[n];}
}

(day 46 - 小根堆 || 动态规划 ) 剑指 Offer 49. 丑数相关推荐

  1. 【LeetCode】剑指 Offer 49. 丑数

    [LeetCode]剑指 Offer 49. 丑数 文章目录 [LeetCode]剑指 Offer 49. 丑数 package offer;public class Solution49 {publ ...

  2. 文巾解题 264. 丑数 II (剑指 Offer 49. 丑数)

    1 题目描述 2 解题方法 方法1:最小堆储存数组 同时设置一个集合存放我们已经考虑过的数,每看到一个丑数n,把2n,3n,5n放入这个最小堆. class Solution:def nthUglyN ...

  3. 剑指 Offer 49. 丑数

    题目描述: 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求按从小到大的顺序的第 n 个丑数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, ...

  4. 剑指offer:丑数

    题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 解题思 ...

  5. 【剑指offer】丑数

    把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. leetcode上也 ...

  6. 《剑指offer》丑数

    题目:把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 解析:如果一个 ...

  7. 打牌博弈 dfs深度优先遍历搜索 排课表 拓扑排序 升序字符串 动态规划 剑指offer编程题整理 leetcode每日算法题

    递归,回溯, 深度优先搜索 题目描述 有一叠扑克牌,每张牌介于1和10之间 有四种出牌方法: 单出1张 出2张对子 出五张顺子,如12345 出三连对子,如112233 给10个数,表示1-10每种牌 ...

  8. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列

    剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...

  9. 剑指offer (From Leetcode) 汇总

    剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知 ...

  10. 《剑指offer》75题 C++详细题解

    目录 简单: 剑指 Offer 03. 数组中重复的数字 map: unordered_map: 原地交换 剑指 Offer 05. 替换空格 剑指 Offer 06. 从尾到头打印链表 出栈入栈 双 ...

最新文章

  1. 3d 行为树编辑器_cocos creator主程入门教程——有限状态机和行为树
  2. ASIC设计的一些软件
  3. es 插入数据_记录一次Java导入百万级数据到Elasticsearch经历
  4. python数据分析方向_python数据分析方向,面试题解答
  5. Kali忘记登录密码——修改root密码
  6. Vue项目开发目录结构和引用调用关系
  7. MariaDB mysql 比较区别 选择
  8. @GetMapping和@PostMapping详解
  9. jQuery的实现原理和核心
  10. Git笔记(31) 重置揭密
  11. python如何连续查找字符串_在另一个字符串Python中多次查找字符串
  12. python绘制小狗_用Python画一只有点方的小狗狗——turtle库基础入门
  13. 信息论基础知识:【信息熵 不确定性】
  14. 共享茶室小程序开发解决方案
  15. 【STM32入门】STM32基础理论知识
  16. html页面ie不显示图片,IE浏览器网页不显示图片如何解决?解决方法介绍
  17. InsecureProgramming-master——abo1
  18. 处理微信里接龙名单,看看谁没有参加接龙
  19. excel数据个数统计问题
  20. Git配置免密登录及常用操作的详细教程(基于Gitee平台)

热门文章

  1. 7.分布式服务架构:原理、设计与实战 --- 服务的容器化过程
  2. 11.TCP/IP 详解卷1 --- UDP:用户数据报协议
  3. 36.MySQY 常用工具
  4. 5. JavaScript Number 对象
  5. 54. Attribute isId 属性
  6. 15. 从远程库克隆
  7. learning docker steps(3) ----- docker services 初次体验
  8. Django 分页 以及自定义分页
  9. N天学习一个Linux命令之grep
  10. [转]JavaScript字符串函数大全