LinkCode 第k个排列
http://www.lintcode.com/zh-cn/problem/permutation-sequence/#
原题
给定 n 和 k,求
123..n
组成的排列中的第 k 个排列。注意事项
1 ≤ n ≤ 9
样例对于
n = 3
, 所有的排列如下:123 132 213 231 312 321
如果
k = 4
, 第4个排列为,231
.
解题思路
使用递归得到全排列的所有解,接着从这些解中找到第K个
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # 递归的方法,创建一个visit判断此值是否已经添加过,每一层不断地循环,加入没有被访问的元素,直到最后结果的长度满足要求加入答案中 class Solution: """ @param n: n @param k: the k-th permutation @return: a string, the k-th permutation """ def getPermutation( self , n, k): nums = [x for x in range ( 1 , n + 1 )] visit = [ 0 for i in range (n)] self .ret = [] self ._permute(nums, visit, 0 , []) # 因为结果要返回字符串类型,所以对数字类型进行处理 ans = [ str (j) for j in self .ret[k - 1 ]] return "".join(ans) def _permute( self , nums, visit, count, ret): if count = = len (nums): self .ret.append(ret) return for i in range ( len (nums)): if visit[i] = = 0 : # ret += [nums[i]] 容易出错,如果加入这句后面需要还原,不然影响后面的循环 visit[i] = 1 self ._permute(nums, visit, count + 1 , ret + [nums[i]]) visit[i] = 0 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥