题目描述:

我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

示例:

输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:

1 是丑数。
n 不超过1690。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/chou-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:

这道题我之所以能自己写出来,貌似是因为我见过,好像是在洛谷还是蓝桥杯来着。。。。

不过问题不大,能不看题解写出来就是好的。思路如下:

1.维护三个队列,q2,q3,q5。q2中的元素依次与2相乘,q3中的元素依次与3相乘,q5中的元素依次与5相乘。

2.首先,数组1依次进入队列q2,q3,q5。

3.q2,q3,q5三个队列的首元素分别与2,3,5相乘,得到temp2,temp3,temp5。

4.比较temp2,temp3,temp5三者大小,选出最小的那个,记为temp,temp就是下一个丑数

5.将temp加入丑数数组的下一位,并且从相应的队列中删除对应首元素(例如,temp是队列q2的首元素*2得到的,那么就删除q2的首元素),然后把temp依次加入到队列q2,q3,q5的末尾。

6.返回第3步,进行循环,直到找到第n位丑数

代码如下:

class Solution {
public:int nthUglyNumber(int n) {vector<unsigned long long int> res;// 第0位没有用,随便给了个数res.push_back(0);// 第一位是1res.push_back(1);// 维护三个队列queue<unsigned long long int> q2;queue<unsigned long long int> q3;queue<unsigned long long int> q5;// 1添加至三个队列尾部q2.push(1);q3.push(1);q5.push(1);// 找完1690个丑数for(int i=1;i<=1690;i++){// 三个队列的首元素依次与2、3、5相乘,保存在temp2,temp3,temp5中unsigned long long int temp2,temp3,temp5;if(!q2.empty())temp2=2*q2.front();if(!q3.empty())temp3=3*q3.front();if(!q5.empty())temp5=5*q5.front();// 计算最小值,赋给tempunsigned long long int temp=(temp2>temp3)?(temp3>temp5?temp5:temp3):(temp2>temp5?temp5:temp2);// 看看temp究竟是谁计算出来的,删除那个队列的首元素if(temp==temp2) q2.pop();if(temp==temp3) q3.pop();if(temp==temp5) q5.pop();// temp就是下一个丑数,加入丑数数组中res.push_back(temp);// temp依次添加到三个队列尾部q2.push(temp);q3.push(temp);q5.push(temp);}// 返回要计算的结果return res[n];}
};

看了下题解,跟这个思路差不多,就不再写题解的思路了。

剑指 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:丑数

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

  4. 【剑指offer】丑数

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

  5. 《剑指offer》丑数

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

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

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

  7. C#LeetCode刷题-剑指Offer

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-剑指Offer | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode剑指Offer ...

  8. 剑指 Offer 41-50

    剑指 Offer 42. 连续子数组的最大和 难度简单102收藏分享切换为英文关注反馈 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求时间复杂度为O(n) ...

  9. LeetCode力扣(剑指offer 41-68)

    目录 剑指 Offer 41. 数据流中的中位数 剑指 Offer 42. 连续子数组的最大和 剑指 Offer 43. 1-n 整数中 1 出现的次数 剑指 Offer 44. 数字序列中某一位的数 ...

最新文章

  1. 基于wsimport生成代码的客户端
  2. Day 8 Linux 优化-补充目录结构
  3. 图像处理(一)——使用matlab放缩图像
  4. python查询代码可循环执行_还在用鼠标进行着重复的操作?几行python代码帮你搞定!!...
  5. 路由器计算机无法上网,路由器安装后电脑无法上网怎么办
  6. 设置Eclipse中的Courier New字体
  7. 【爬虫】爬取百度贴吧数据
  8. 聊聊如何构建一支自驱团队(二)
  9. 导入安全证书到jdk
  10. linux HZ 值_Linux的serial串口控制台
  11. navicat怎么设计教室管理信息系统_基于师生体验设计的智能教室是怎么样的?...
  12. Hadoop 之 Distcp官网介绍和注意事项
  13. java 向下转型运行时错误_java多态和向下转型问题。
  14. Python-20-异常处理
  15. 海康萤石云硬盘录像机SDK使用
  16. 怎样启动本地mysql服务_启动本地mysql服务
  17. 中国裁判文书网爬虫思路详细分析 (2018年11月上旬可用)
  18. Inno setup 常用修改技巧
  19. TIA博途S7-1200中实现高低字节或高低字调换的几种方法介绍
  20. 怎么有的帖子发不了啊

热门文章

  1. php优缺点ppt,ppt的作用是什么
  2. 0051:软件版本(C++)
  3. excel2latex
  4. Hello Go(十六)、Go语言常用标准库六
  5. 猫猫学iOS 之CoreLocation指南针小应用
  6. 供应高耐压TY71XX系列稳压IC 输出带放过冲
  7. 浅谈 深度优先搜索与广度优先搜索
  8. java 内存溢出问题分析过程
  9. c语言比较三个数的大小
  10. android listview html,android ——ListView