题目描述

编写一段程序来查找第 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. C# 模板编程相关学习总结
  2. 计算机网络实验报告哈工大_哈工大计算机网络实验报告.doc
  3. Mybatis的增删改查操作(包含动态代理,动态SQL标签,缓存,#与$的使用传入多参数,获取自增id等基本操作)
  4. 模糊搜索时搜索结果中关键词变为不同颜色
  5. 复刻了一个史上最强 Redis 6.0 版本
  6. 区块链 智能合约是有状态的吗
  7. 解决servlet中get方式中中文乱码问题(二):装饰者模式使用
  8. 【AI识人】OpenPose:实时多人2D姿态估计 | 附视频测试及源码链接
  9. Q4-软件测试面试常见问题总结-本科毕业
  10. Django(wsgi,middleware,url源码剖析)
  11. python中cursor的用法_python中cursor操作数据库
  12. swiper滑动时每页都有动画
  13. 自定义MVC原理与框架
  14. Definer 预言机攻击事件分析
  15. 10大耗油,10大省油。
  16. python小游戏 走迷宫小游戏设计与实现
  17. MES系统对企业而言是必须的吗?
  18. Dubbo-06 20190320
  19. swagger2的全新UI组件Knife4j
  20. 华为、苹果,为何“盯”上二手机?

热门文章

  1. 拿奖拿到手软!小米米家荣获9项德国iF设计奖
  2. Employment
  3. LIO-PPF:通过增量平面预拟合和跟踪的快速激光雷达惯导里程计
  4. php一个中文占几个字节,php中一个字符占用几个字节?
  5. Received lower prio advert, forcing new election (KEEP ALIVED)
  6. 先锋性能服务器,12月8日部分服务器先锋体验开服公告
  7. Android 天气预报(2)
  8. 学会Retrofit+OkHttp+RxAndroid三剑客的使用,让自己紧跟Android潮流的步伐
  9. Linux中设置计划任务
  10. spring入门第一天之IOC与DI