题目描述

编写一段程序来查找第 n 个超级丑数。

超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。

示例:

输入: n = 12, primes = [2,7,13,19]
输出: 32
解释: 给定长度为 4 的质数列表 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。
说明:

1 是任何给定 primes 的超级丑数。
给定 primes 中的数字以升序排列。
0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000 。
第 n 个超级丑数确保在 32 位有符整数范围内。

  • 一拿到题又懵逼,感觉可以set装,但不知道怎么遍历,set用的也不熟练

解题思路

  • 动态规划的记忆存储化
  • 绝活,我看了至少两个小时的代码才大概理解了意思,感觉内核是一种贪心的思想

思想:我们使用动态规划的记忆存储化思想去做当前问题。超级丑数的质因数只属于primes,所以,我们所得到的所有的结果,都是由1与primes当中的质数的乘积得到的。因此我们将每一个primes当中的元素进行记忆化管理,这是为了得到当前结果当中与primes元素相乘得到的最小值,从而确保得到的数字是按顺序的。就可以很容易的解决。

我们反向思维,从因数出发,只要从质数列表 primes中选取因数,那么乘积自然就是超级丑数。
用质数列表 primes中的数字不断与已经生成的超级丑数进行相乘,得到新的超级丑数。我们需要注意生成丑数的顺序。
用一个数组(store)保存每个 primes中的质因数下一步应该和哪一个超级丑数相乘(由小到大排着来)。

   const int inf =INT_MAX;int nthSuperUglyNumber(int n, vector<int>& primes) {vector<int> dp(n+1, inf);//初始化只用n+1,避免了大量内存的浪费dp[0]=1;vector<int> store(primes.size(),0);//用来存储每一个可以被primes元素整除,当前位最小的index。都初始化为0,因为都得从dp[0]开始。for(int i=1;i<=n;++i){for(int j=0;j<store.size();++j){dp[i]=min(dp[i], primes[j]*dp[store[j]]);//分贝乘以不同的primes,得到这些值当中的最小值就是下一个超级丑数。}//得到超级丑数之后,还需要检查超级丑数与之前的结果除数间是否与primes当中的元素一致。如果一致就进位。for(int j=0;j<store.size();++j){if(dp[i]/dp[store[j]]==primes[j]){store[j]++;}}}return dp[n-1];}

*leetcode-313-超级丑数-medium相关推荐

  1. LeetCode 313. 超级丑数(动态规划)

    1. 题目 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13,1 ...

  2. Leetcode 313. 超级丑数 解题思路及C++实现

    解题思路: 与Leetcode 264. 丑数 II的解题思路一样,均使用最小堆来存储丑数,第i次更新最小堆时,得到第i大的丑数. 可结合Leetcode 264. 丑数 II的解题思路理解:http ...

  3. 从C语言的角度重构数据结构系列(八)-数据结构堆知识超级丑数

    前言 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战应用系列课程 https://blog.csdn.net/wenyusuran/category_2239261.html ...

  4. 【数学】丑数II 和 超级丑数

    题目描述 给你一个整数 n ,请你找出并返回第 n 个 丑数 . 丑数 就是只包含质因数 2.3 和/或 5 的正整数. 提示:1也是丑数 示例 1: 输入:n = 9 输出:10 解释:[1, 2, ...

  5. php实现丑数,曾经绊倒我的 “超级丑数”

    点击 蓝色字体 关注,欢迎星标此号 既然来了,何不认真读完此文呢?每天多花20分钟,做一些别人不愿做的事,坚持下去,会有一个结果的.废话少说,通过此文,你将会学到如下知识: 学会列表和排序很难求解的场 ...

  6. 【LeetCode】263.丑数 264. 丑数 II

    I. 263. 丑数(是否为丑数) 一.题目描述 编写一个程序判断给定的数是否为丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例 1: 输入: 6 输出: true 解释: 6 = 2 ...

  7. leetcode算法题--丑数 II★

    原题链接:https://leetcode-cn.com/problems/ugly-number-ii/ 三指针 int nthUglyNumber(int n) {int a = 0, b = 0 ...

  8. LeetCode 1201. 丑数 III(最小公倍数+二分查找)

    1. 题目 请你帮忙设计一个程序,用来找出第 n 个丑数. 丑数是可以被 a 或 b 或 c 整除的 正整数. 示例 1: 输入:n = 3, a = 2, b = 3, c = 5 输出:4 解释: ...

  9. LeetCode 263. 丑数 264. 丑数 II(DP)

    文章目录 1. LeetCode 263. 丑数 解题 2. LeetCode 264. 丑数 II DP解题 1. LeetCode 263. 丑数 编写一个程序判断给定的数是否为丑数. 丑数就是只 ...

最新文章

  1. ubuntu终端基础命令
  2. Python中的装饰器,迭代器,生成器
  3. 一个简单的dotnet tool
  4. 【转】带你玩转Visual Studio——02.带你新建一个工程
  5. 先发不一定制人:美韩5G网络体验差遭吐槽
  6. C++高级教程之多线程
  7. WCF与AJAX编程开发实践(2):支持ASP.NET AJAX的Web Service
  8. CONFIG_ARM64_MODULE_PLTS 的作用
  9. python实现模拟登录云课堂智慧职教并获取课程信息(1)
  10. PolSARpro导入外部极化矩阵数据(以高分三号为例,附格式转化代码)
  11. 计算机方向键不能使用,电脑键盘中的数字按键不能用是什么原因?
  12. 考勤系统(打卡时间计算)
  13. 当我开始学微信公众号开发时,我要学什么?
  14. mysql fabric HA测试
  15. ysdk应用宝渠道接入问题记录
  16. Java中限定类名和非限定类名的区别
  17. Python爬虫获取基金持仓股票数据
  18. VIE结构是什么?互联网公司
  19. CSS面试题总结,助(祝)2021成功拿到offer
  20. HTML5七夕情人节表白网页制作【HTML5庆祝生日蛋糕烟花特效】HTML+CSS+JavaScript

热门文章

  1. 如何实现redis秒杀?
  2. Employment
  3. Qt QSplitter拆分器
  4. 夜光 带你走进微信小程序研发(十五)
  5. github创建分支并提交代码至分支
  6. 面试题0402-国泰君安
  7. Windows ❀ Win10如何打开注册表编辑器
  8. js获取页面高度获取视口高度获取内容高度获取滚动条宽度高度
  9. 解决vue跳转同一路由报错问题
  10. 6-3 汽车收费 (10 分)