多伦多Airbnb算法面试必看:LeetCode 313超级丑数Python解法详解 ![]()
大家好!今天和大家分享一道Airbnb面试高频题——**LeetCode 313超级丑数(Super Ugly Number)**的Python解法!
无论你是准备多伦多Airbnb面试,还是单纯想刷题提升算法能力,这篇详解都能帮到你!
问题描述 
超级丑数是指其所有质因数都在给定的质数列表中的正整数。题目要求找出第n个超级丑数。
例如:
- 输入:
n = 12,primes = - 输出:
32(因为前12个超级丑数为``)
解题思路 
这道题是丑数II(Ugly Number II)的扩展版,核心思路依然是动态规划+最小堆或指针法。这里重点讲最小堆的解法,高效易懂!
- 最小堆(优先队列):每次弹出当前最小丑数,乘以质因数后推入堆,避免重复计算。
- 哈希表去重:确保每个丑数只被处理一次。
Python代码实现 
import heapq
def nthSuperUglyNumber(n, primes):
heap =
seen = {1}
for _ in range(n):
ugly = heapq.heappop(heap)
for prime in primes:
new_ugly = ugly * prime
if new_ugly not in seen:
seen.add(new_ugly)
heapq.heappush(heap, new_ugly)
return ugly
复杂度分析 
- 时间:O(n log n),堆操作每次O(log n),共n次。
- 空间:O(n),存储堆和哈希表。
面试小贴士 
- Airbnb面试官可能会追问:如何优化空间?(比如用指针法替代堆)
- 类似题目:LeetCode 264丑数II,建议一起刷!
希望这篇解析对你有帮助!欢迎留言讨论或分享你的解法~ ![]()
#算法面试 #LeetCode #Python #多伦多求职 #Airbnb面试
