【LeetCode】60. Permutation Sequence 解题报告(Python)

本文介绍了一种高效求解n个数字全排列中第k个排列的方法。通过分析全排列规律,采用递减阶乘和索引计算的方式,避免了全排列的暴力生成,大大提升了算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目分析:

这一题是让求n个数字全排列中的第k个结果,一开始我想递归求出全排列并记录次数,到第k次停止,实现起来比较复杂,后来看到网上给出的思路发现全排列是有规律的:参考博客中写的很详细,推荐阅读,这里我只是将他的代码改写成python版本。

测试代码:

class Solution:
    def getPermutation(self, n, k):
        res, jcs = '', [1]
        nums = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
        k -= 1
        for i in range(2, n + 1):
            jcs.append(jcs[-1] * i)

        for i in range(n):
            jc = jcs[n - i - 2]
            point = int(k / jc)
            k %= jc
            res += nums[point]
            nums.pop(point)
        return res

print(Solution().getPermutation(4, 17)) #提交时请删除该行

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值