当前位置: 首页 > news >正文

剑指Offer系列(java版,详细解析)49.丑数

题目描述

剑指 Offer 49. 丑数

难度中等149收藏分享切换为英文接收动态反馈

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

示例:

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

说明:

  1. 1 是丑数。
  2. n 不超过1690。

注意:本题与主站 264 题相同:https://leetcode-cn.com/problems/ugly-number-ii/

测试用例

  • 功能测试(输入2、3、4、5、6等)
  • 特殊输入测试(边界值1;无效输入0)
  • 性能测试(输入较大的数字,如1500)

题目考点

  • 考察应聘者对时间复杂度的理解。
  • 考察应聘者的学习能力和沟通能力,当应聘者听到不熟悉的概念之后,要有主动积极的态度,大胆向面试官提问。

解题思路

自己解题为什么超时?是因为不管一个数是不是丑数,我们都需要对它进行计算,所以我们试着找到一种只计算丑数的方法。

根据丑数的定义,丑数应该是另一个丑数乘以2、3或者5的结果(1除外),因此我们可以创建一个数组,里面的数字都是排好序的丑数,每个丑数都是前面的丑数乘以2、3或者5得到的。(这些需要思考一下🤔)

参考解题

class Solution {
    public int nthUglyNumber(int n) {
        int a = 0, b = 0, c = 0;
        int[] dp = new int[n];
        dp[0] = 1;
        for(int i = 1; i < n; i++) {
            int n2 = dp[a] * 2, n3 = dp[b] * 3, n5 = dp[c] * 5;
            dp[i] = Math.min(Math.min(n2, n3), n5);
            if(dp[i] == n2) a++;
            if(dp[i] == n3) b++;
            if(dp[i] == n5) c++;
        }
        return dp[n - 1];
    }
}

相关文章:

  • 剑指Offer系列(java版,详细解析)50.第一个只出现一次的字符
  • 剑指Offer系列(java版,详细解析)51.数组中的逆序对
  • 剑指Offer系列(java版,详细解析)52.两个链表的第一个公共节点
  • 剑指Offer系列(java版,详细解析)53.在排序数组中查找数字
  • 剑指Offer系列(java版,详细解析)54.二叉搜索树的第K大的节点
  • 剑指Offer系列(java版,详细解析)55.二叉树的深度
  • 剑指Offer系列(java版,详细解析)56.数字中数字出现的次数
  • 剑指Offer系列(java版,详细解析)57.和为s的数字
  • 剑指Offer系列(java版,详细解析)58.翻转字符串
  • 剑指Offer系列(java版,详细解析)59.队列的最大值
  • 剑指Offer系列(java版,详细解析)60.n个骰子的点数
  • 剑指Offer系列(java版,详细解析)61.扑克牌中的顺子
  • 剑指Offer系列(java版,详细解析)62.圆圈中最后剩下的数字
  • 剑指Offer系列(java版,详细解析)63.股票的最大利润
  • 剑指Offer系列(java版,详细解析)64.求1+2+...+n
  • CSS 专业技巧
  • css布局,左右固定中间自适应实现
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Mocha测试初探
  • Nacos系列:Nacos的Java SDK使用
  • PAT A1017 优先队列
  • PAT A1092
  • Python连接Oracle
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SpriteKit 技巧之添加背景图片
  • tweak 支持第三方库
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vim Clutch | 面向脚踏板编程……
  • Web Storage相关
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 给Prometheus造假数据的方法
  • 批量截取pdf文件
  • 用jQuery怎么做到前后端分离
  • Java总结 - String - 这篇请使劲喷我
  • 湖北分布式智能数据采集方法有哪些?
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $.ajax()
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (笔试题)合法字符串
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (论文阅读11/100)Fast R-CNN
  • (小白学Java)Java简介和基本配置
  • (一)UDP基本编程步骤
  • (转)人的集合论——移山之道
  • .md即markdown文件的基本常用编写语法
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET企业级应用架构设计系列之结尾篇
  • .Net中间语言BeforeFieldInit
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @Service注解让spring找到你的Service bean
  • [.NET]桃源网络硬盘 v7.4
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记