leetcode60_Permutation Sequence
来源:互联网 发布:余弦相似度算法 java 编辑:程序博客网 时间:2024/06/06 03:24
一、问题描述
The set [1,2,3,…,n]
contains a total of n! unique permutations.
By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
即给定数字n,包含1到n这几个数字的全排列中,找到第k个数字(排好序的)。二、代码编写
找规律:很明显第一个数字就是所有数字的循环出现,直接用 ((k-1)/(n-1)!)% n即可。除以(n-1)的阶乘是因为,相同的数字会重复出现(n-1)的阶乘次,即后面所有n-1个数字的全排序数目。
第二个数字明显就是第二个数字的排列。虽然后面的数字不一定是顺序的,如不是[2,3]而是[1, 3],这时候的规律是剩下所有数字的下标。
如对于上述问题描述中的例子,k=4,后面两个数字是[1, 3],我们也可以根据k直接得到第二个数字。
代码:
'''@ author: wttttt at 2016.12.16@ problem description see: https://leetcode.com/problems/permutation-sequence/@ solution explanation see: http://blog.csdn.net/u014265088/article/@ github:https://github.com/wttttt-wang/leetcode@ trick, simply looking for the law'''import mathclass Solution(object): def getPermutation(self, n, k): """ :type n: int :type k: int :rtype: str """ tt = [i for i in range(1, n+1)] len_tt = len(tt) rstr = "" while len_tt > 1: ind = ((k - 1) / math.factorial(len_tt - 1)) % len_tt rstr += str(tt[ind]) # remove the number that already been added if ind + 1 < len_tt: tt = tt[:ind] + tt[(ind+1):] else: tt = tt[:ind] len_tt -= 1 rstr += str(tt[0]) return rstr
0 0
- leetcode60_Permutation Sequence
- sequence
- SEQUENCE
- Sequence
- sequence
- sequence
- Sequence
- sequence
- sequence
- sequence
- Sequence
- Sequence
- Sequence
- Sequence
- sequence
- sequence
- sequence
- Sequence
- unbuntu 安装spree
- 第二十三节,SIMD
- 模拟登录程序
- Swift 头像上传(4)Alamofire上传图片到服务器
- Oracle经典书籍介绍
- leetcode60_Permutation Sequence
- 第二十四节,参考链接
- Java 读文件写入数据库 编码问题 utf-8、 GBK
- 【git】首次上传项目到oschina
- 浅谈OC(object-c)中深浅复制
- 【WPF】【C#】联网异步获取二进制文件(如图片)的流程
- 原声的ajax
- 分布式智能控制-示例
- 获取当前系统时间