タイトル
セットには 、合計が含ま Nを!ユニークな順列。[1,2,3,...,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"
思考
低速デジタル高からの変化が減少:ルールがある見つけることができます。!0ビット毎に(N-1)倍の第一の変形例;! 1ビット、それぞれ(N-2)のものとなります。
def getPermutation(self, n: int, k: int) -> str:
ans = [0]*n
nums = [i for i in range(1,n+1)]
# n-1 的阶乘
n_p = 1
for i in range(1,n):
n_p *= i
# 从高位到低位安排数字
for i in range(n-1):
index = k // n_p + int(k%n_p>0)
ans[i] = nums[index-1]
nums.remove(nums[index-1])
k = k % n_p
n_p = n_p // (n-i-1)
ans[n-1] = nums[-1]
ans_str = ""
for i in ans:
ans_str += str(i)
return ans_str