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

264. 丑数 II

Problem: 264. 丑数 II

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这道题目关键在于理解丑数的生成规律。丑数就是质因子只包含 2、3 和 5 的正整数。因此我们可以创建一个dp数组用来保存计算丑数的子过程。在这个过程中只要保证数据是那个小到大生成的就可以了。

解题方法

1.初始化丑数数组dp,dp[1] = 1,表示第一个丑数为1。
2.初始化三个指针i2、i3、i5,都指向第一个丑数。
3.每次生成新的丑数,都是从dp[i2]*2、dp[i3]*3、dp[i5]*5这三个数中取最小的一个,作为新的丑数。这个新的丑数就是下一个丑数。
4.将数值等于丑数的数字指针向后移动一步
重复步骤3~4,直到找到第n个丑数。

复杂度

时间复杂度:

时间复杂度 O ( n ) O(n) O(n)。因为要遍历一遍数组

空间复杂度:

空间复杂度: O ( n ) O(n) O(n)。额外空间dp数组。

Code

class Solution {
    public int nthUglyNumber(int n) {
        int[] dp = new int[n + 1];
        dp[1] = 1;
        for (int i = 2, i2 = 1, i3 = 1, i5 = 1, a, b, c; i <= n; i++) {
            a = dp[i2] * 2;
            b = dp[i3] * 3;
            c = dp[i5] * 5;
            int cur = Math.min(a, Math.min(b, c));
            if (cur == a) {
                i2++;
            }
            if (cur == b) {
                i3++;
            }
            if (cur == c) {
                i5++;
            }
            dp[i] = cur;

        }
        return dp[n];
    }
}

http://www.kler.cn/a/233078.html

相关文章:

  • 字符及字符串(ASCII编码系统)
  • Linux kernel 堆溢出利用方法(二)
  • 【VBA实战】用Excel制作排序算法动画续
  • 多叉树笔记
  • 同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡
  • vue3 pdf base64转成文件流打开
  • flutter使用qr_code_scanner扫描二维码
  • 嵌入式学习Day17 linux高级编程 -- 输入输出
  • 边缘计算中的能源效率与运维成本
  • XML介绍和基本语法
  • 深入理解Python爬虫的四大组件之Logger(记录器)
  • 用bootstrap结合jQuery实现简单的模态对话框
  • Java图形化界面编程—— LayoutManager布局管理器笔记
  • Flink cdc debug调试动态变更表结构
  • 同步復位和異步復位二者各自的優缺點
  • Android 粒子喷泉动效
  • Python进阶:迭代器生成器
  • 【数学建模】【2024年】【第40届】【MCM/ICM】【A题 七鳃鳗性别比与资源可用性】【解题思路】
  • 备战蓝桥杯---搜索(完结篇)
  • 无人机系统组装与调试,多旋翼无人机组装与调试技术详解,无人机飞控系统原理
  • 机器学习11-前馈神经网络识别手写数字1.0
  • 【OpenHarmony硬件操作】WIFI模块的操作(udp+tcp)
  • 比较Kamailio和OpenSIPS的重写contact函数
  • 华为机考入门python3--(10)牛客10-字符个数统计
  • PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证
  • 电脑通电自启动设置