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