当前位置: 首页 > news >正文

leetcode 46 全排列 | 回溯

在这里插入图片描述

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        def backtrace(nums,track,used):
            # 触发结束的条件
            if len(track) == len(nums):
                res.append(track.copy()) # 
                return
            for i in range(len(nums)):
                if used[i] :
                    continue
                # 做选择
                track.append(nums[i])
                used[i] = True
                # 进入下一层
                backtrace(nums,track,used)
                # 取消选择
                track.pop()
                used[i] = False
        res = []
        used = [False] * len(nums)
        track = []
        backtrace(nums,track,used)
        return res

解释

permute 是主方法,用于初始化回溯过程并返回结果。

  • 初始化 res 为空列表,用于存储所有排列。
  • 初始化 used 为布尔值列表,表示每个元素是否被使用。
  • 初始化 track 为空列表,用于存储当前路径。
  • 调用 backtrace 开始回溯过程。
  • 返回结果列表 res
backtrace 函数

backtrace 是一个递归函数,用于生成所有排列。

  • 结束条件

    • track 的长度等于 nums 的长度时,说明已经生成了一个完整的排列,将其添加到结果列表 res 中。
  • 回溯过程

    • 遍历 nums 中的每个元素。
    • 如果当前元素已经被使用(used[i]True),则跳过。
    • 将当前元素添加到 track 中,并标记为已使用(used[i] = True)。
    • 递归调用 backtrace
    • 回溯:移除 track 中的最后一个元素,并将当前元素标记为未使用(used[i] = False)。

track.copy() 的重要性

  • 在将 track 添加到结果列表 res 时,需要使用 track.copy(),否则 res 中存储的将是同一个 track 的引用。在后续的回溯过程中,track 会被修改,导致 res 中的内容也发生变化。

相关文章:

  • Selenium 简单入门操作示例
  • Oracle-rman restore遭遇RMAN-03002与ORA-19563
  • Linux实现生产者消费者模型(基于阻塞队列)
  • VideoGrain:ICLR2025收录,无需训练,实现细粒度多层次视频编辑
  • MySQL 创建数据库
  • ESP32-S3-N16R8的麦金塔小智AI机器人及配套游戏机(教程及相关固件)
  • SpringMVC请求与响应深度解析:从核心原理到高级实践
  • Java并发编程2(锁-Sychronized)
  • Linux: 静态库和动态库
  • 在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服务器,并实现远程联机,详细教程
  • 【C语言】深入理解指针(1)
  • Docker应用部署之mysql篇(day5)
  • 用Python掌握算法:初学者指南
  • springboot+mybatisplus
  • MySQL安装与卸载
  • 开源webmail邮箱客户端rainloop的分支版本SnappyMail 设置发件人允许多重身份
  • Linux一步部署主DNS服务器
  • 《DepMamba : Progressive Fusion Mamba for Mutilmodal Depression Detection》论文精读笔记
  • (九)Spring Webflux
  • 深度学习 Note.1
  • A股三大股指收跌:地产股领跌,银行股再度走强
  • 李公明|一周画记:哈佛打响第一枪
  • 深一度|“凑合过”的利物浦,英超第二冠只求性价比
  • CSR周刊:李宁打造世界地球日特别活动,珀莱雅发布2024年度可持续发展报告
  • 中央纪委办公厅公开通报3起整治形式主义为基层减负典型问题
  • 王羲之《丧乱帖》在日本流传了1300年,将在大阪展23天