Leetcode.264 丑数 II

embedded/2025/2/21 6:49:29/

题目链接

Leetcode.264 丑数 II mid

题目描述

给你一个整数 n n n ,请你找出并返回第 n n n丑数

丑数 就是质因子只包含 2 2 2 3 3 3 5 5 5 的正整数。

示例1:
输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。
示例2:
输入:n = 1
输出:1
解释:1 通常被视为丑数。
提示:
  • 1 ≤ n ≤ 1690 1 \leq n \leq 1690 1n1690

解法:动态规划

f ( n ) f(n) f(n) 代表第 n n n丑数

因为每个丑数都只包含 2 , 3 , 5 2, 3, 5 2,3,5 的质因子(除开 1 1 1),那么 f ( n ) f(n) f(n) 也就是第 n n n丑数,必然是由 [ 1 , n − 1 ] [1, n - 1] [1,n1] 之间的某一个丑数,假设是 f ( i ) × 2 , f ( i ) × 3 , f ( i ) × 5 f(i) \times 2,f(i) \times 3, f(i) \times 5 f(i)×2,f(i)×3,f(i)×5,三个其中的一个而来。

很显然, f ( n ) f(n) f(n) 的值一定是 f ( i ) × 2 , f ( i ) × 3 , f ( i ) × 5 f(i) \times 2,f(i) \times 3, f(i) \times 5 f(i)×2,f(i)×3,f(i)×5 三者之中的最小值

举例说明:

f(1) = 1
f(2) = f(1) * 2 = 2
f(3) = f(1) * 3 = 3
f(4) = f(2) * 2 = 4
f(5) = f(1) * 5 = 5
f(6) = f(3) * 2 = 6
f(7) = f(4) * 2 = 8
f(8) = f(3) * 3 = 9

我们用三个指针 a , b , c a, b, c a,b,c 分别代表 × 2 \times 2 ×2 × 3 \times 3 ×3 × 5 \times 5 ×5 代表的丑数。那么当前的丑数 f ( i ) f(i) f(i) 就是 m i n { f ( a ) × 2 , f ( b ) × 3 , f ( c ) × 5 } min\{ f(a) \times 2, f(b) \times 3, f(c) \times 5\} min{f(a)×2,f(b)×3,f(c)×5}


r 2 = f ( a ) × 2 r 3 = f ( b ) × 3 r 5 = f ( c ) × 5 r_2 = f(a) \times 2 \\ r_3 = f(b) \times 3 \\ r_5 = f(c) \times 5 r2=f(a)×2r3=f(b)×3r5=f(c)×5

如果 f ( i ) = r 2 f(i) = r_2 f(i)=r2,那么指针 a a a 就往后移动一位。

其原理是,如果 r 2 = f ( a ) × 2 r_2 = f(a) \times 2 r2=f(a)×2 就是当前的第 i i i 个丑数,那么我们记录答案, f ( i ) = r 2 f(i) = r_2 f(i)=r2。既然 f ( a ) × 2 f(a) \times2 f(a)×2 这个丑数已经在当前的答案集合 f f f 中了,那么比当前丑数 f ( a ) × 2 f(a) \times2 f(a)×2 更小的丑数也肯定在答案集合 f f f 中,所以后面只需要考虑比 f ( a ) × 2 f(a) \times 2 f(a)×2 更大的丑数,也就是 f ( a + 1 ) × 2 f(a+1) \times 2 f(a+1)×2,所以指针 a a a 才要往后移动一位。

对于 f ( i ) = r 3 f(i)=r_3 f(i)=r3 f ( i ) = r 5 f(i) = r_5 f(i)=r5 的情况同理。

a , b , c a, b,c a,b,c 都初始化为 1 1 1 f ( 1 ) = 1 f(1) = 1 f(1)=1

{ r 2 = f ( a ) × 2 r 3 = f ( b ) × 3 r 5 = f ( c ) × 5 f ( i ) = m i n { r 2 , r 3 , r 5 } , i ∈ [ 2 , n ] i f r 2 = f ( i ) t h e n a + 1 i f r 3 = f ( i ) t h e n b + 1 i f r 5 = f ( i ) t h e n c + 1 \left\{\begin{array}{l} r_2 = f(a) \times 2 \\ r_3 = f(b) \times 3 \\ r_5 = f(c) \times 5 \\ f(i) = min\{r_2, r_3,r_5\},\ i \in [2,n]\\ if\ r_2=f(i) \ then \ a + 1 \\ if\ r_3=f(i) \ then \ b + 1 \\ if\ r_5=f(i) \ then \ c + 1 \end{array}\right. r2=f(a)×2r3=f(b)×3r5=f(c)×5f(i)=min{r2,r3,r5}, i[2,n]if r2=f(i) then a+1if r3=f(i) then b+1if r5=f(i) then c+1

时间复杂度: O ( n ) O(n) O(n)

C++:

class Solution {
public:int nthUglyNumber(int n) {vector<int> f(n + 1);f[1] = 1;int a = 1, b = 1, c = 1;for(int i = 2; i <= n; ++i){int r2 = f[a] * 2, r3 = f[b] * 3, r5 = f[c] * 5;f[i] = min({r2, r3, r5});if(f[i] == r2) a++;if(f[i] == r3) b++;if(f[i] == r5) c++;}return f[n];}
};

http://www.ppmy.cn/embedded/164002.html

相关文章

QT实战-qt各种菜单样式实现2

本文主要介绍了qt菜单自定义实现不同项文字显示不同颜色,以及实现支持设置菜单固定最大高度,超出时自动显示滚动条, 先上图如下: 1.自定义实现不同项文字显示不同颜色 原理:QWidgetAction和QLabel实现 代码: void Dialog::InitMenu() {m_pmenu->clear();m_mapMenuI…

从 0 到 1:Spring Boot 构建高效应用指南

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 在当下竞争激烈且技术飞速发展的 Java 开发领域&#xff0c;各类框架层出不穷。而 Spring Boot 凭借…

记录几个U9的逻辑

对系统的掌控能力在于掌握&#xff0c;理解其逻辑的深度。一旦清楚系统的逻辑&#xff0c;基本上就是透明了一样。兴威特公司2025年其U9系统重新上线。从中了解到一些U9的逻辑&#xff0c;积累了几个新东西&#xff0c;特意记录下来。主要是系统初始上线阶段需要用到的知识点吧…

OpenCV机器学习(10)训练数据的一个核心类cv::ml::TrainData

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::TrainData 类是 OpenCV 机器学习模块中用于表示训练数据的一个核心类。它封装了样本数据、响应&#xff08;标签&#xff09;、样本权重…

数据结构:广义表( Generalized List)及其实现

什么是广义表&#xff1f; 广义表&#xff08;Generalized List&#xff09;是一种扩展的线性表&#xff0c;它可以存储原子&#xff08;单个数据元素&#xff09;或子表&#xff08;另一个广义表&#xff09;。广义表的特点是&#xff1a;它可以递归定义&#xff0c;也就是说…

C语言——深入理解指针(3)

文章目录 字符指针变量数组指针变量数组指针变量是什么&#xff1f;数组指针变量怎么初始化 二维数组传参的本质函数指针变量函数指针变量的创建函数指针变量的使用两段关于函数的有趣代码typedef关键字 函数指针数组转移表第一种写法&#xff1a;第二种写法&#xff08;函数指…

Zabbix——自定义监控项脚本分享

​ 最近想整理一下所有用到的自定义监控的脚本&#xff0c;整理一下发到GitHub了 大家有兴趣可以看看 地址 背景 做这个项目主要是因为&#xff0c;我发现在监控的过程中&#xff0c;内置的监控项其实是完全不够的&#xff0c;但是我们又必须去对一些东西做监控&#xff0c…

[生活杂项][运动教程]自由泳

https://v.youku.com/v_show/id_XMzgzMjkwMzg0MA.html?spma2h0k.11417342.soresults.dtitle https://v.youku.com/v_show/id_XMzgxNjM2NjY4NA.html?spma2h0k.11417342.soresults.dtitle