LeetCode(力扣) 全排列 python解析

全排列

时间:2023.9.27
题目地址:全排列


题目介绍

全排列

题目分析

全排列是回溯算法的经典题型,直接用回溯就行了。
优化一下算法的话对于这题,剪枝就是用记忆搜索就行了,减少重复的。

代码

		"""全排列"""
        def backtrack(choices, state, selected, res):
            if len(state) == len(choices):
                res.append(list(state)) # 通过list(state) 来创建state的副本,不能直接append(state),那样加的是引用。
                return
            for i, value in enumerate(choices):
                if selected[i]:
                    continue
                selected[i] = True
                state.append(value)
                backtrack(choices, state, selected, res)
                state.pop()
                selected[i] = False

        state = []
        # 记忆列表
        selected = [False for _ in range(len(nums))]
        res = []
        backtrack(nums, state, selected, res)
        return res
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值