- 从1到n构成的数字的第k位
def __init__(self):
self.res = ''
def getPermutation(self, n, k):
"""
:type n: int
:type k: int
:rtype: str
"""
arr = [i for i in range(1, n + 1)]
fac = [0, 1, 1]
for i in range(3, n + 1):
fac.append((i - 1) * fac[i - 1])
self.dfs(k, arr, fac)
return self.res
def dfs(self, k, arr, fac):
# 以1-n开头分组,计算每组的的数量为grouplen,等于(n-1)!
grouplen = fac[len(arr)]
# 根据排序的第几位k和grouplen获得要将排好序的arr中的哪个arr[idx]加入到res中
idx = (k-1) // grouplen
self.res += str(arr[idx])
# 把加进去的数pop掉,k在选中的组别中的排序等于k%grouplen
arr.pop(idx)
remain = k % grouplen
# 递归调用
if arr:
self.dfs(remain, arr, fac)
转载于:https://www.jianshu.com/p/b041a6afe351