程序不是年轻的专利,但是,他属于年轻。
每天五分钟,看懂一道简单、中等难度的算法题,尽可能将复杂的题讲清楚。
疯狂学习python中,2020-09-05更新
给出集合 [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”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutation-sequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
按照题意可知, 当n个不同的元素(1, 2, 3, 4, 5, 6…,n)可以组成的全排列总数目为 N!
按照全排列公式可知,总数目为:
N ! = n ∗ ( n − 1 ) . . . . ∗ 1 N! = n*(n-1) ....* 1 N!=n∗(n−1)....∗1
根据公式可以推导:
N ! = ( N − 1 ) ! ∗ N N! = (N-1)! *N N!=(N−1)!∗N
以 n= 4为例,全排列结果为:
当K=9时:
class Solution:
def getPermutation(self, n: int, k: int) -> str:
# 递归
def recursion(n):
return 1 if n == 0 else n * recursion(n-1)
nums = [str(i+1) for i in range(n)]
k = k - 1 # 是以下标取值
res = ""
while nums:
temp = recursion(len(nums)-1)
index = int(k/temp)
res += nums.pop(index)
k -= index*temp
return res
if __name__ == '__main__':
obj = Solution()
obj.getPermutation(4, 9)