这个题解使用了数学推导的方法,通过计算阶乘数组和确定每一位数字来生成第k个排列。具体步骤如下:
1. 计算阶乘数组 factorial,其中 factorial[i] 表示 i 的阶乘,用于后续计算每一位数字的索引。
2. 初始化剩余数字列表 nums,包含从 1 到 n 的所有数字。
3. 初始化结果字符串 result,用于存储最终的排列结果。
4. 从最高位开始,通过 k 除以 factorial[i] 的商确定每一位的数字,并将对应的数字从 nums 中移除,同时更新 k 的值。
5. 重复步骤4,直到确定了所有位的数字。
6. 返回生成的排列结果 result。
时间复杂度: O(n^2)
空间复杂度: O(n)
class Solution:
def getPermutation(self, n: int, k: int) -> str:
# 计算阶乘数组
factorial = [1]
for i in range(1,n):
factorial.append(factorial[-1] * i)
# 初始化剩余数字列表
nums = [str(i) for i in range(1,n+1)]
# 初始化结果字符串
result = ""
# 确定每一位的数字
k -= 1
for i in range(n-1,-1,-1):
# 计算当前位的数字索引
index = k // factorial[i]
# 将对应数字添加到结果字符串
result += nums.pop(index)
# 更新 k 的值
k -= index * factorial[i]
return result