1. 解析

这道题Ugly Number II 的升级版,题目大意,求解第n个super Ugly Number,super Ugly Number(除1之外)的因子只存在因子列表primes中,换汤不换药,只是将3个因子改成了n个因子

2. 分析

最直接的做法就是利用优先队列,每次取出最小的数,然后依次和因子列表primes中的每个因子依次相乘,以产生下一个super Ugly Number,为了过滤掉已经出现过的数,将已经产生的数在hashtable中备份,每次先在hashtable中先检索产生的ugly Number是否出现过,若没有,放进队列,若已经存在,不放进队列里面。

class Solution {
public:int nthSuperUglyNumber(int n, vector<int>& primes) {priority_queue<long long, vector<long long>, greater<long long>> nums(1, 1);map<long long, bool> exist;while (--n > 0){long long num = nums.top();nums.pop();for (auto prime: primes){if (exist[prime*num]) continue; //若产生的数之前已经产生过,不放进队列nums.push(prime*num);exist[prime*num] = true;}}return nums.top();}
};

3. 动态规划法

3个变量替换成n个元素的数组即可,详见 Ugly Number II

class Solution {
public:int nthSuperUglyNumber(int n, vector<int>& primes){vector<int> counts(primes.size(), 0);vector<int> nums(primes.size());vector<int> res(1, 1);while (res.size() < n){int minNum = INT_MAX;for (int i = 0; i < primes.size(); ++i){nums[i] = primes[i] * res[counts[i]];if (minNum > nums[i])minNum = nums[i];} res.push_back(minNum);for (int i = 0; i < nums.size(); ++i) if (minNum == nums[i]) counts[i]++;}return res.back();}
};

4. 类似题目

Ugly Number II

Super Ugly Number相关推荐

  1. leetcode 263, 264, 1201, 313. Ugly Number I, II, III, Super Ugly Number(leetcode 丑数问题合集)

    263. Ugly Number https://leetcode.com/problems/ugly-number/ 本题题解由下面的 264. Ugly Number II 改造而来,所以效率会比 ...

  2. LeetCode Super Ugly Number

    题意:给出一个素数数组,求其第n个的丑数 思路:用idx数组表示在计算第i个丑数时,与素数数组对应的前一个丑数的下标.在计算完第i个丑数后,需要更新下次计算时的对应素数的下标 代码如下: public ...

  3. ugly number

    ugly number 是指质因数只有2, 3, 5的正整数. 1. 判断一个数是否为ugly number bool isUgly(int num) {if(num <= 0) return ...

  4. LeetCode 264. Ugly Number II--C++,Python解法

    题目地址:Ugly Number II - LeetCode Write a program to find the n-th ugly number. Ugly numbers are positi ...

  5. 剑指offer:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

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

  6. leetcode 264. Ugly Number II

    传送门 264. Ugly Number II QuestionEditorial Solution My Submissions Total Accepted: 36259 Total Submis ...

  7. Leet Code OJ 263. Ugly Number [Difficulty: Easy]

    题目: Write a program to check whether a given number is an ugly number. Ugly numbers are positive num ...

  8. 丑数 Ugly Number

    为什么80%的码农都做不了架构师?>>>    问题: Write a program to check whether a given number is an ugly numb ...

  9. LeetCode - Medium - 264. Ugly Number II

    Topic Math Dynamic Programming Heap Description https://leetcode.com/problems/ugly-number-ii/ Analys ...

最新文章

  1. tabcontainer控件太长_AjaxControlToolKit--TabContainer控件的介绍收藏[摘录]
  2. 《 郝斌 java自学视频 完结 》_《[郝斌]Java自学视频[完结]》AVI[压缩包]
  3. git tag和branch的区别
  4. HDU--1872 稳定排序
  5. Linux 应用程序 网络通讯函数记录
  6. 【华为云技术分享】原来CTR预估模型的发展有这样的规律
  7. 【英语学习】【Level 07】U05 Best Destination L2 The City of Lights
  8. linux mysql 没有密码忘记,在linux系统中,如果忘记了MySQL的root密码,有没有办法重新设置新密码呢?...
  9. .Net下采用Base64编码的一个封装好的类库
  10. 可做fft分析吗_2020速卖通还要做吗?速卖通2020年市场分析!
  11. jspdf打印、pdf打印
  12. post接口请求测试,通俗易懂
  13. Vue开发者工具安装祥析
  14. 《SysML精粹》学习记录--第二章
  15. 【转载】跟我一起写 Makefile(一)
  16. Java 创建并用应用幻灯片母版
  17. 多重共线性是如何影响回归模型的
  18. 论文中不带边框表格制作方法
  19. Geoffrey Hinton获得时间检验奖;AI预测世界杯荷兰夺冠;Galactica不靠谱,ChatGPT又如何……...
  20. 计算机专业问题在线解答,计算机科学专业的编程问题,在线解答,有问必答

热门文章

  1. 用photoshop拼接一个七巧板图案
  2. html5获取当前位置的api腾讯地图,腾讯地图JavaScript API调用
  3. 点燃我,温暖你,李峋同款爱心代码!
  4. python实现图书管理系统——通过excel文件或者TXT文件存放数据
  5. 如何用计算机算时间,在win10电脑的计算器中如何进行日期的计算
  6. 腾讯T3大牛亲自讲解!面试字节跳动Android研发岗,值得收藏!
  7. 《高性能MySQL》(第三版)之一:MySQL架构与基础
  8. 如何在Mac上停止使用iCloud照片库?
  9. 我的XBox手柄怎么有线断连了
  10. MySQL导入数据库1118错误解决方案[ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB