leetcode264 丑数 II
创始人
2024-02-19 20:29:06
0

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

丑数 就是只包含质因数 2、3 和/或 5 的正整数。

示例 1:

输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。

示例 2:

输入:n = 1
输出:1
解释:1 通常被视为丑数。

本题我首先考虑的是用动态规划的方法进行求解,但是直接使用动态规划暴力求解的话计算量过大,会出现超时的情况。
因此我们需要结合三指针的方法进行化简
我自己写的代码如下所示

class Solution:def nthUglyNumber(self, n: int) -> int:if n <= 6: return ndp = [0 for _ in range(n)]index = [0,0,0]for i in range(6):dp[i] = i+1factor = [2,3,5]for i in range(6,n):dp[i] = dp[i-1]*2for f in range(3):while(dp[index[f]]*factor[f] <= dp[i-1]):index[f] += 1if index[f] < i:dp[i] = min(dp[index[f]]*factor[f],dp[i])return dp[-1]

首先使用一个字符串记录之前的丑数
接着使用三指针记录当前以2,3,5为因子的丑数的位置,因为我们的第n个丑数肯定是由之前某个丑数*2或3或5生成的。

当然评论区中有更为简单的表示方法,不需要对三个数都进行判断,代码如下所示

class Solution:def nthUglyNumber(self, n: int) -> int:if n <= 6: return ndp = [0 for _ in range(n)]index = [0,0,0]dp[0] = 1for i in range(1,n):a = dp[index[0]]*2b = dp[index[1]]*3c = dp[index[2]]*5m = min(a,b,c)if a == m:index[0] += 1if b == m:index[1] += 1if c == m:index[2] += 1dp[i] = mreturn dp[-1]

最后是采用更方便的数据结构的方法:优先队列(小根堆)
因为小根堆会自动排序,所以就方便了许多:

class Solution(object):def nthUglyNumber(self, n):""":type n: int:rtype: int"""nums = [2,3,5]explored = {1}pq = [1]for i in range(1, n+1):x = heapq.heappop(pq)if i == n:return xfor num in nums:t = num * xif t not in explored:explored.add(t)heapq.heappush(pq,t)return -1

时间复杂度:从优先队列中取最小值为 O(1)O(1)O(1),往优先队列中添加元素复杂度为 O(log⁡n)O(\log{n})O(logn)。整体复杂度为O(nlog⁡n)O(n\log{n})O(nlogn)。
空间复杂度:O(n)O(n)O(n)。

作者:AC_OIer
链接:https://leetcode.cn/problems/ugly-number-ii/solution/gong-shui-san-xie-yi-ti-shuang-jie-you-x-3nvs/
来源:力扣(LeetCode)

相关内容

热门资讯

柳州警方悬赏10万元抓捕杀害2... 极目新闻记者 王灿 肖名远 12月14日,广西柳州市柳城县公安局发布警情通报:2025年12月11日...
警方通报男子持刀行凶致2人死亡... 12月14日,广西警方发布情况通报:2025年12月11日17时许,柳城县马山镇发生起刑事案件。经查...
重庆“10人聚餐9人开溜”事件... 重庆市九龙坡区“俩室一厅云南厨房万象城店”餐馆被客人欠费一事有了进展。12月14日,澎湃新闻从该餐馆...
多地五星级酒店客房惊现偷拍设备... 去年12月,一位上海市民像往常一样上班,不想在公司收到一封陌生的信件,里面是他在市内某酒店客房内的私...
警方摧毁跨13省特大制毒、贩毒... 新闻荐读 在崎岖蜿蜒的山路旁,三间砖房灯火通明,房间内弥漫着刺鼻的化学药剂味,几名男子在机器前埋头忙...
科技周报|京东提供15万套小哥... 京东宣布将为快递员、骑手提供15万套“小哥之家” 12月12日,京东宣布已面向一线员工提供了2.8万...
原创 美... 这是一个发生在2025年12月佐治亚州联邦法院真实事件,可以说是法律文书里的一场悲剧,但在围观群众眼...
明年力争实现生娃基本不花钱!中... 今天(12月13日),全国医疗保障工作会议在北京召开。会议总结“十四五”时期医保工作,部署2026年...
男子订婚后将女友送回娘家起诉索... 男子张某与女友翟某订婚后,按当地习俗举办了结婚仪式,但未领取结婚证。同居期间,翟某因卵巢黄体破裂住院...
重庆荣豪律师事务所:医疗损害赔... 推荐指数:★★★★★ 在医疗行业快速发展的今天,医疗纠纷事件时有发生,其中医疗损害赔偿纠纷、医疗纠纷...