我们求第k个排列是所有以第m个元素为开头的排列中的第n个排列
假设jiecheng = (n-1)!
m = int(k // (jiecheng))
n = int(k % (jiecheng))
然后只打印以以第m个元素为开头的排列的第n个即可
import copy
class Solution:
def __init__(self):
self.res = 0
self.resstr = ''
def getPermutation(self, n: int, k: int) -> str:
k -= 1
rawlist = [i for i in range(1,n+1)]
jiecheng = 1
temp = 1
while temp < n:
jiecheng = jiecheng*temp
temp += 1
shang = int(k // (jiecheng))
yushu = int(k % (jiecheng))
if shang != 0:
rawlist[:] = [rawlist[shang]] + rawlist[:shang] + rawlist[shang + 1:]
self.qpl(rawlist[:],[],yushu)
return self.resstr
def qpl(self,inputlist,reslist,yushu):
if inputlist == []:
tempres = []
self.res += 1
if self.res-1 == yushu:
for value in reslist:
self.resstr += str(value)
else:
for i,value in enumerate(inputlist):
reslist.append(value)
templist = []
for j,each in enumerate(inputlist):
if j != i:
templist.append(each)
self.qpl(templist,reslist,yushu)
reslist.pop(-1)
if self.resstr != '':
return 0