leetcode_60. 第k个排列
2020-09-05 10:23
1321 查看
目录
一、题目内容
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n 和 k,返回第 k 个排列。说明:
给定 n 的范围是 [1, 9]。
给定 k 的范围是[1, n!]。
示例 1:
输入: n = 3, k = 3
输出: "213"
示例 2:
输入: n = 4, k = 9
输出: "2314"
二、解题思路
1.从高位到低位依次进行确定。
2.每次循环得到低一位的阶乘,然后用k除以这个低一位的阶乘得到高位,然后k-高位*低一位的阶乘得到低一位的k,如此循环。
3.每找到一个高位则将其加入到res中,同时candidate里要删除掉这个被选的高位。
三、代码
[code]import math class Solution: def getPermutation(self, n: int, k: int) -> str: ans = '' def jiecheng(n): if n <= 1: return 1 else: return n * jiecheng(n - 1) candidate = list(range(1, n + 1)) res = [] while candidate: low_jiecheng = jiecheng(len(candidate) - 1) high_index = math.ceil(k / low_jiecheng) - 1 high_num = candidate[high_index] res.append(high_num) candidate.remove(high_num) k = k - high_index * low_jiecheng ans = '' for i in range(len(res)): ans += str(res) return ans if __name__ == '__main__': n = 3 k = 3 s = Solution() ans = s.getPermutation(n, k) print(ans)悲恋花丶无心之人 CSDN认证博客专家 [i] TensorFlow 深度学习 神经网络 计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。
相关文章推荐
- 利用阿里云服务器免费体验word press博客、个人网站
- 【SpringBoot】三十三、SpringBoot+LayUI后台管理系统开发脚手架
- 【第一节】VS Code中的一些骚操作,设置,做完这些,前端开发仿佛加了“瑞士军刀”!
- mysql学习-数据表的创建,修改,删除
- mysql学习-mysql的数据类型
- 美股再崩盘,苹果一夜失血超12000亿;拼多多上线“卫生巾自由”专区;娃哈哈回应宗庆后涉嫌原始股骗局 | 邦早报
- iPhone 12或仅有一款支持毫米波5G,只供应三个国家;TikTok 仍是全球最吸金App;腾讯回应印度政府 | 科技股周报
- V-Loam论文解读
- mysql学习-dml操作(增删改)
- tableau必知必会之学做吸睛的圆角标靶图
- 使用matlab调用Oracle数据库
- 用python语言写程序有什么好用的编辑器?
- Python の 在 VSCode 中使用 IPython Kernel 的方法
- 程序员你的maven多模块项目如何对外输出为一个构件?
- 院士给自己博士生写的一封信:博士生每天工作12小时只是一个下限
- Python课堂笔记-第七讲(元组&字典&集合)
- ML之sklearn:sklearn库中的ShuffleSplit()函数和StratifiedShuffleSplit()函数的讲解
- 说说soft-nms和nms那些事
- 成功解决sklearn.exceptions.NotFittedError: This StandardScaler instance is not fitted yet. Call ‘fit‘ wi
- Spring Boot 2 实战:使用 @Condition 注解来根据条件注入 Bean