算法和数据结构(Python)——回溯法求排列组合

适用情况需要找数组中数字的组合或排列例一 子集leetcode 78 (medium)给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。示例:Input: [1, 5, 3]Output: [], [1], [5], [3], [1,5], [1,3], [5,3], [1,5,3]解题思路:迭代,从空元素开始,循环每加入一个数组中的数值都相当于在上一个...
摘要由CSDN通过智能技术生成

适用情况

需要找数组中数字的组合排列

模式概括

回溯法

res = []
tmp = []
if <1.设置条件:把需要的当前列表加入res>:
	res.append(当前列表)
	return res
for 选择 in 选择列表:
	<2.做选择> 
	<3.递归调用> backtrack(选择列表,当前列表,res)
	<4.撤销选择>

图解

在这里插入图片描述

例一 全排列

给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
Input: [1,3,5]
Output: [1,3,5], [1,5,3], [3,1,5], [3,5,1], [5,1,3], [5,3,1]

解题思路:
结合回溯法的模式,需要特别考虑的是:

  1. <满足条件>到达底层的条件就是选择列表nums为空
def permute(self, nums: List[int]) -> List[List[int]]:
        # 函数输入为空时的特殊情况
        if not nums: return nums
        # 参数赋值初始化
        res = []
        tmp = []
        # 调用backtrack函数,在类(class Solution)中要用self调用函数
        self.backtrack(nums, tmp, res)
        return res
    
    def backtrack(self, nums, tmp, res):   # nums是选择列表,tmp是当前选择
        #<满足条件> 到达底层的条件就是选择列表nums为空
        if not nums:
            # 错误写法 result.append(tem_result[]) 这样把地址传入,后面回退的时候会是一堆空列表
            res.append(tmp[
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值