From e01c276f24df3b2c8077303ee460b493a9bdb9dc Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Fri, 30 Oct 2026 20:18:05 +0800 Subject: [PATCH] =?UTF-8?q?Update=2049.=20=E4=B8=91=E6=95=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 文字校对题目描述,补充动态规划三指针解法思路与推导示例。 --- notes/49. 丑数.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/notes/49. 丑数.md b/notes/49. 丑数.md index 2bd327c6..e96b6889 100644 --- a/notes/49. 丑数.md +++ b/notes/49. 丑数.md @@ -4,10 +4,14 @@ ## 题目描述 -把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。例如 6、8 都是丑数,但 14 不是,因为它包含因子 7。习惯上把 1 当做是第一个丑数。求按从小到大的顺序的第 N 个丑数。 +把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。例如 6、8 都是丑数,但 14 不是,因为它包含因子 7。习惯上把 1 当作第一个丑数。求按从小到大的顺序的第 N 个丑数。 ## 解题思路 +除了 1,每个丑数都是某个更小的丑数乘以 2、3 或 5 得到的。dp 按从小到大的顺序保存丑数,i2、i3、i5 分别指向下一个要乘以 2、3、5 的丑数,三个乘积中最小的就是下一个丑数。哪个指针产生了它,就把哪个指针后移;6 = 3 × 2 = 2 × 3 这类乘积相等的情况,两个指针同时后移,避免重复。 + +例如已经得到 1, 2, 3, 4, 5, 6 时,i2、i3、i5 分别指向 4、3、2,三个候选为 8、9、10,下一个丑数是 8,i2 后移到 5。 + ```java public int nthUglyNumber(int n) { if (n <= 6)