2020-05-13 No.60 第k个排列

给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n 和 k,返回第 k 个排列。

range(1, n+1)的列表,以任意一个为起点的排列数为(n-1)!,所以先看起点是第几个数字,然后更新K,从原始列表中删除起点数字,迭代计算

class Solution:
    def getPermutation(self, n: int, k: int) -> str:
        factory = [1]
        nums = ['1']
        for i in range(1, n):
            factory.append(factory[i-1]*i)
            nums.append(str(i+1))
        k -= 1
        res = []
        for i in range(n-1, -1, -1):
            idx = k // factory[i]
            k = k % factory[i]
            
            res.append(nums[idx])
            del nums[idx]
        return ''.join(res)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。