前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >第n个丑数

第n个丑数

作者头像
用户1148830
发布于 2018-01-03 10:06:23
发布于 2018-01-03 10:06:23
89900
代码可运行
举报
运行总次数:0
代码可运行

【题目描述】 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 【思路】 首先想到的是肯定是暴力法,从1,2,3,…循环一直找到给定的第n个丑数,但是这种做法我记得在LeetCode是TLE的。那么有没有更elegant的方法呢?以下思路来自《剑指offer》第34题。 既然一个个循环不可行,那么就生成第n个丑数呗。 由于丑数只包含因子2,3,5,那么我们一个丑数只乘2,3,5的话也可以得到丑数。由于1是一个丑数,那么分别乘上2,3,5可以得2,3,5。显然,它们是丑数。但是注意4也是一个丑数,它可以由2 x 2得到。所以丑数可以再乘以2,3,5得到下一个丑数,唯一要保证的是应该从小到大得到下一个丑数。所以要分别保留2,3,5的上一个丑数指针,下一个丑数则是三个指针所指的数值分别乘以对应的因子中的最小值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Solution {
    public int GetUglyNumber_Solution(int index) {
       if(index==0) return 0;//注意0的情况,没有加这一行牛客网上显示通过0%
       int count=1;
        int index_2=0,index_3=0,index_5=0;//三个因子的指针
        int number=1;
        int[] uglyNumber=new int[index];//用于保存前index个丑数
        uglyNumber[0]=1;
        while(count<index){
            int tmpnumber_2=uglyNumber[index_2]*2;
            int tmpnumber_3=uglyNumber[index_3]*3;
            int tmpnumber_5=uglyNumber[index_5]*5;
            number=Math.min(tmpnumber_2,Math.min(tmpnumber_3, tmpnumber_5));//最小的数作为下一个丑数
            uglyNumber[count]=number;
            while(uglyNumber[index_2]*2<=uglyNumber[count])
                index_2++;
            while(uglyNumber[index_3]*3<=uglyNumber[count])
                index_3++;
            while(uglyNumber[index_5]*5<=uglyNumber[count])
                index_5++;
            count++;
        }
        return number;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年07月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
优雅简洁的异步Asnyc/Await
async函数中,如果有多个await关键字时,如果有一个await的状态变成了rejected,那么后面的操作都不会继续执行,promise也是同理有这样一个函数async
coder_koala
2019/07/30
6000
ES6/ES7/ES8/ES9/ES10常用特性和新特性
变量的改变,添加了块级作用域的概念 let声明变量(块级作用域),let是更完美的var,它声明的全局变量不是全局属性widow的变量,这便解决了for循环中变量覆盖的问题 const声明常量(会计作用域)
公众号---人生代码
2020/06/28
1.5K0
前端工程师面试题自检篇(一)
toFixed(num) 方法可把 Number 四舍五入为指定小数位数的数字。那为什么会出现这样的结果呢?
loveX001
2022/10/12
4110
如何写出一个惊艳面试官的 Promise【近 1W字】 前言源码1.Promise2.Generator3.async 和 await4.Pro
1.高级 WEB 面试会让你手写一个Promise,Generator 的 PolyFill(一段代码); 2.在写之前我们简单回顾下他们的作用; 3.手写模块见PolyFill.
火狼1
2020/05/09
7190
如何写出一个惊艳面试官的 Promise【近 1W字】
                            前言源码1.Promise2.Generator3.async 和 await4.Pro
字节跳动面试官:请用JS实现Ajax并发请求控制
讲真的,最近也很迷茫。关于技术、关于生活吧。也找了很多在大厂的朋友去聊,想需求一些后期发展的思路。这其中也聊到了面试,聊到了招聘中会给面试者出的一些题目。我正好也好久没面试了,就从中选了几道。最近也会陆续出一系列关于一些面试问题的解析。
JowayYoung
2021/02/03
2.5K0
腾讯前端一面面试题总结_2023-02-27
⽤webpack优化前端性能是指优化webpack的输出结果,让打包的最终结果在浏览器运⾏快速⾼效。
var_1024
2023/02/27
1.3K0
来45道Promise面试题一次爽到底(1.1w字用心整理)
这篇文章是一篇比较纯的Promise笔试文章,是我自己在做题的时候,根据题目想要的考点来反敲知识点,然后再由这个知识点编写从浅到深的的题目。
童欧巴
2020/12/15
2.4K0
来45道Promise面试题一次爽到底(1.1w字用心整理)
大厂高频面试精选
key 的作用是为了在 diff 算法执行时更快的找到对应的节点,提高 diff 速度。
grain先森
2019/03/28
8300
大厂高频面试精选
一年经验如何准备前端面试
NaN 指“不是一个数字”(not a number),NaN 是一个“警戒值”(sentinel value,有特殊用途的常规值),用于指出数字类型中的错误情况,即“执行数学运算没有成功,这是失败后返回的结果”。
loveX001
2022/12/15
3750
用一道大厂面试题带你搞懂事件循环机制
面试题如下,大家可以先试着写一下输出结果,然后再看我下面的详细讲解,看看会不会有什么出入,如果把整个顺序弄清楚 Node.js 的执行顺序应该就没问题了。
前端迷
2019/08/29
5860
用一道大厂面试题带你搞懂事件循环机制
一年前端面试打怪升级之路_2023-02-28
这里,传入 mutiple 的是四个分离的参数,但是如果在 mutiple 函数里尝试输出 args 的值,会发现它是一个数组:
gogo2027
2023/02/28
3620
很爽的Promise几道console题
本篇博文是学习的掘金的一篇博文:【建议星星】要就来45道Promise面试题一次爽到底(1.1w字用心整理),经过自己一个个问题的学习,整理如下: 一.Promise的几道基础题 题目一 ✨ const promise1 = new Promise((resolve,reject)=>{ console.log('promise1') }) console.log('1',promise1) // promise1 // 1 Promise {<pending>} 先执行构造函数中的代码pro
六个周
2022/10/28
7100
拿到大厂前端offer的前端开发是怎么回答面试题的_2023-02-28
Nginx 是一款轻量级的 Web 服务器,也可以用于反向代理、负载平衡和 HTTP 缓存等。Nginx 使用异步事件驱动的方法来处理请求,是一款面向性能设计的 HTTP 服务器。
aync_sync
2023/02/28
4850
JavaScript: 从 Event Loop 到 Promise (常见问题分析)
总结一点:JavaScript是单线程的,但是浏览器不是单线程的。一些I/O操作,定时器的计时和事件监听是由其他线程完成的。
西南_张家辉
2021/02/02
7400
2023秋招前端面试必会的面试题_2023-02-28
事件是用户操作网页时发生的交互动作,比如 click/move, 事件除了用户触发的动作外,还可以是文档加载,窗口滚动和大小调整。事件被封装成一个 event 对象,包含了该事件发生时的所有相关信息( event 的属性)以及可以对事件进行的操作( event 的方法)。
用户10377376
2023/02/28
8600
社招前端一面经典手写面试题集锦
String.prototype.padStart 和 String.prototype.padEnd是ES8中新增的方法,允许将空字符串或其他字符串添加到原始字符串的开头或结尾。我们先看下使用语法:
helloworld1024
2022/09/17
3960
JS:你真的会用 Promise 吗?
试想一下,有 3 个异步请求,第二个需要依赖第一个请求的返回结果,第三个需要依赖第二个请求的返回结果,一般怎么做?
WEBJ2EE
2019/07/19
2.7K0
JS:你真的会用 Promise 吗?
# 一次搞懂 EventLoop
众所周知,JS 是一门单线程语言,可是浏览器又能很好的处理异步请求,那么到底是为什么呢?
九旬
2024/04/03
1180
前端经典面试题(有答案)_2023-03-01
(1)AJAX Ajax 即“AsynchronousJavascriptAndXML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。它是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。其缺点如下:
var_1024
2023/03/01
1.3K0
面试题:说说事件循环机制(满分答案来了)
JavaScript代码的执行过程中,除了依靠函数调用栈来搞定函数的执行顺序外,还依靠任务队列(task queue)来搞定另外一些代码的执行。整个执行过程,我们称为事件循环过程。一个线程中,事件循环是唯一的,但是任务队列可以拥有多个。任务队列又分为macro-task(宏任务)与micro-task(微任务),在最新标准中,它们被分别称为task与jobs。
winty
2020/03/19
4.1K0
面试题:说说事件循环机制(满分答案来了)
推荐阅读
相关推荐
优雅简洁的异步Asnyc/Await
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档