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)!个permutation,只要当前的k进行(n-1)!取余,得到的数字就是当前剩余数组的index,如此就可以得到对应的元素, 递推直到数组中没有元素结束~
class Solution:
# @return a string
def getPermutation(self, n, k):
factorial = 1; res = ""
for i in xrange(2, n):
factorial *= i
num = [i for i in xrange(1, n + 1)]
k -= 1
for i in reversed(xrange(n)):
res += str(num[k / factorial])
del num[k / factorial]
if i > 0:
k %= factorial
factorial /= i
return res

本文介绍了一种算法,用于找出由1到n组成的n!个唯一排列中的第k个排列序列。通过将k对(n-1)!取余,可以确定当前元素的位置,递归执行此操作直至数组为空。
237

被折叠的 条评论
为什么被折叠?



