60. 排列序列
60. 排列序列 -> 方式一:找规律 eg:n=3,k=3 '123' '132' '213' '231' '312' '321' 每个首位1 2种 即找到3/2即可 -< 代码: class Solution: def getPermutation(self, n: int, k: int) -> str: num = [str(i) for i in range(1, n+1)]#生成1到n的列表以str形式存储 res = '' n-=1 # 如果第一个数确定了,则后续阶乘为(n-1)!,所以需要自减1(1后续有俩种情况) while n>-1: t = math.factorial(n) loc = math.ceil(k / t) - 1 res += num[loc] num.pop(loc) k %= t n -= 1 return res k=3时, 目标排列是 213,怎么找到的,如下 因为确定第1位的数时, 每个数后续可能的阶乘都是 (n-1)!=2!=2, 即如果第一位是1, 则后续就只有{2,3}, {3, 2} 两种可能,第一位是其他数也一样。 用 k / (n-1)! = 3 / 2 = 1 不整除,余数为1, 说明第一个位置的数即使用了{1,2,3}的第一个数1,还是无法满足k, 所以第一个位置要用 {1,2,3}的第二个数即2,所以用2。 剩余{1, 3}, k 更新为1, n 更新为2 用 k / (n-1)! = 1 / 1 = 1 整除,余数为0, 说明第二个位置的数得用了{1, 3}的第一个数1。 此时剩余{3}, n=1,k=余数=0,所以下次直接取剩余数的最后一个数 确定第三个位置的数时, 剩余{3}, k=0, 直接取最后一个数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)