题目描述:

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

解题思路:

1. 常规思路,从1开始到index判断每个数是否是丑数,但这样时间上肯定过不了,因为存在重复计算。

2. 用空间换时间的思路,发现每一个丑数都是由之前的丑数乘2,3或5得到的,所以考虑从第一个丑数开始向后推到第index个。由于需要维持一个有序的丑数序列,对于每个丑数都分别乘2,3,5这三个基数,取大于当前丑且最小的那个数放入序列。一轮选完后,需要调整每个基数在下一轮乘的丑数,即未被选中的基数的保持原位,选中的向后移动一位。

注意对于边界条件的考虑,这里小于1的情况常规认为不可能发生,但是没有判断即报错。

代码:

 class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index<)
return ;
vector<int> uglynumber(index, );
uglynumber[] = ;
int ugly2=, ugly3=, ugly5=;
int cur_index=;
for(int i=; i<index; i++)
{
int cur_ugly = min(uglynumber[ugly2]*, min(uglynumber[ugly3]*, uglynumber[ugly5]*));
uglynumber[cur_index] = cur_ugly;
cur_index++;
while(cur_ugly >= uglynumber[ugly2]*)
{
ugly2++;
}
while(cur_ugly >= uglynumber[ugly3]*)
{
ugly3++;
}
while(cur_ugly >= uglynumber[ugly5]*)
{
ugly5++;
} }
return uglynumber[index-];
}
};

剑指offer:丑数的更多相关文章

  1. 剑指Offer——丑数

    剑指Offer--丑数 前言     参照<剑指Offer>,通过洞悉其思想并消化吸收,改为java实现,供自己以后巩固. package cn.edu.ujn.offersword; i ...

  2. 剑指Offer丑数问题

    这是剑指第一次卡死我的题……记录一下 首先看题目: 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数 ...

  3. 剑指offer 丑数

    思路:可以发现,每个丑数都是由以前的丑数得到.当前丑数一定是之前丑数能够得到的最小丑数. AC代码 class Solution { public: int GetUglyNumber_Solutio ...

  4. 用js刷剑指offer(丑数)

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

  5. 剑指offer——丑数(c++)

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

  6. 剑指offer--33.丑数

    本来用数组做标志位,但是测试数据有第1500个,859963392,惹不起哦 ------------------------------------------------------------- ...

  7. 剑指Offer-32.丑数(C++/Java)

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

  8. 剑指Offer32 丑数

    /************************************************************************* > File Name: 32_UglyNu ...

  9. 干货 | 剑指offer系列文章汇总

    下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现  剑指offer系列  始 剑指offer—灯管问题(1)  剑指offer—10人电梯(2)  ...

  10. 【剑指offer】丑数

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

随机推荐

  1. CI框架结合jQuery实现上传多张图片即时显示

    一.Html代码如下: <tr> <td class="txt_r"><span class="orange">* < ...

  2. mac杂记

    brew 安装.更新 https://blog.csdn.net/fxp850899969/article/details/53284193 vmware work 15 pro https://ww ...

  3. CRC-CCITT CRC-16

    CRC分为以下几种标准: CRC-12码 CRC-16码 CRC-CCITT码 CRC-32码 在线CRC计算器 https://www.lammertbies.nl/comm/info/crc-ca ...

  4. 《Spring in Action 4》阅读札记

    重要思路 Spring通过面向POJO编程.依赖注入.AOP和模板技术来降低Java开发的复杂性. 依赖注入能够让互相协作的软件组件保持松耦合,模块直接的耦合性是必要的,否则没法完成工作,但是耦合性需 ...

  5. restfulframework引用多对多外键

    记录一下工作中遇到的问题 最近在写restfulframework,感觉还是很便利的 首先贴一下文档地址 https://www.django-rest-framework.org/api-guide ...

  6. 查看Windows系统进程(PID)

    语法:tasklist /svc 作用:打印系统进程,并显示其对应PID,可用来跟踪进程并根据PID来进行关闭.

  7. 如何临时修改 macOS 应用的界面语言?

    一般情况下,应用程序的界面语言会和系统语言保持一致.但有些时候,我们也会希望临时换用一种不同的界面语言.例如,一些程序的中文翻译词不达意,有必要参考英文界面来确定功能的准确含义:又如,一些网页会强制按 ...

  8. node基础学习——path的处理与路径转换

    处理与转换路径path normalize该方法将非标准路径字符串转换为标准路径字符串,在转换过程中执行以下操作: ①解析路径字符串中的’..’字符串与’.’字符串,返回解析后的标准路径. ②将多个斜 ...

  9. ThreadLocal源码原理以及防止内存泄露

    ThreadLocal的原理图: 在线程任务Runnable中,使用一个及其以上ThreadLocal对象保存多个线程的一个及其以上私有值,即一个ThreadLocal对象可以保存多个线程一个私有值. ...

  10. 转:MySQL到底能支持多大的数据量?

    MySQL到底能支持多大的数据量? MySQL是中小型网站普遍使用的数据库之一,然而,很多人并不清楚MySQL到底能支持多大的数据量,再加上某些国内CMS厂商把数据承载量的责任推给它,导致很多不了解M ...