https://leetcode.com/problems/permutation-sequence/
这类题目,有必要学习一下,排列,问第K个。
个人解答
class Solution:def getPermutation(self, n: int, k: int) -> str:l = [i for i in range(1, n + 1)]res = ''fac = factorial(n)k -= 1while k > 0:q, k = divmod(k, fac // n)res += str(l[q])del(l[q])fac //= nn -= 1res += ''.join(map(str, l))return res
题目分析
显然是有规律可言的。
"123""132""213""231""312""321"
从最高位到最低位,选择越来越少(分别是3,2,1)
定了最高位之后,后边有 (n-1)! 个
具体来看,如果想知道当前对应的是第几个,那么除以(n-1)!即可,而剩下的,可以用来索引下一位。
代码中的 fac // n 其实就是 (n - 1)! ,只不过这样计算更为高效。
