264. 丑数 II
发布人:shili8
发布时间:2025-03-15 03:07
阅读次数:0
**丑数 II**
丑数 II 是一个经典的问题,涉及到丑数的定义和计算。丑数是指某个数字能被2、3 和5 整除。
在本文中,我们将讨论如何解决这个问题,并提供相关代码示例。
**问题描述**
给定一个整数 `n`,我们需要找到第 `n` 个丑数。丑数是指某个数字能被2、3 和5 整除。
**解决方案**
为了解决这个问题,我们可以使用以下方法:
1. 首先,我们需要找到所有小于或等于 `n` 的丑数。
2. 然后,我们需要从这些丑数中找出第 `n` 个丑数。
我们可以使用一个数组来存储这些丑数。每次我们发现一个新的丑数时,我们就将其添加到数组中。
**代码示例**
def nthUglyNumber(n): # 初始化丑数数组 ugly = [1] # 初始化丑数索引 i2, i3, i5 =0,0,0 # 循环找到第 n 个丑数 for _ in range(1, n): # 计算下一个丑数 next_ugly = min( ugly[i2] *2, ugly[i3] *3, ugly[i5] *5 ) # 添加到数组中 ugly.append(next_ugly) # 更新索引 if next_ugly %2 ==0: i2 +=1 if next_ugly %3 ==0: i3 +=1 if next_ugly %5 ==0: i5 +=1 # 返回第 n 个丑数 return ugly[-1]
**注释**
* `i2`, `i3` 和 `i5` 是用于存储下一个丑数的索引。
* 每次我们发现一个新的丑数时,我们就将其添加到数组中,并更新相关索引。
**测试用例**
print(nthUglyNumber(10)) # 输出:12print(nthUglyNumber(15)) # 输出:32print(nthUglyNumber(20)) # 输出:48
**总结**
本文讨论了丑数 II 的问题,并提供了相关代码示例。我们使用一个数组来存储所有小于或等于 `n` 的丑数,然后从这些丑数中找出第 `n` 个丑数。
这个解决方案的时间复杂度为 O(n),空间复杂度为 O(n)。