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

Python小练习系列 Vol.7:全排列生成(回溯算法模板题)

🧠 Python小练习系列 Vol.7:全排列生成(回溯算法模板题)

🔄 本期我们来刷一道“回溯入门必考模板题” —— 全排列。只要搞懂它,很多排列组合类题目就能迎刃而解!


🧩 一、题目描述

给定一个不含重复数字的整数数组 nums,返回其所有可能的全排列,按任意顺序输出即可。

示例:

输入:nums = [1, 2, 3]
输出:[
  [1,2,3], [1,3,2],
  [2,1,3], [2,3,1],
  [3,1,2], [3,2,1]
]

🧠 二、解题思路

这是经典的 排列问题,适合用回溯算法解决:

  1. 使用 DFS 构造所有可能的排列路径;
  2. 使用 used 数组标记当前数字是否已被使用;
  3. 满足排列长度 = len(nums) 时,即为一个解。

👨‍💻 三、Python代码实现

def permute(nums):
    res = []
    path = []
    used = [False] * len(nums)

    def dfs():
        if len(path) == len(nums):
            res.append(path[:])  # 拷贝一份结果
            return
        for i in range(len(nums)):
            if not used[i]:
                used[i] = True
                path.append(nums[i])
                dfs()
                path.pop()
                used[i] = False

    dfs()
    return res

📌 四、运行示例

print(permute([1, 2, 3]))

输出:

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]

🧩 五、解题小结

步骤说明
路径 path当前正在构建的排列
选择 used标记哪些数字已使用
回溯剪枝用完一个数字后恢复现场

✅ 回溯三件套:路径、选择列表、终止条件


💡 六、进阶挑战

  • 🧠 如果 nums 有重复元素,如何避免重复排列?(提示:先排序 + 跳过相同)
  • 🚀 输出排列的字典序顺位?
  • 📦 支持 k 个数字的排列组合选择?

❤️ 结语

全排列是刷题中回溯法的基本功,掌握它就掌握了“尝试 + 回退 + 去重”的核心思维。

📌 下一期预告:组合总和(回溯 + 剪枝 + 数学)


👉 点赞 👍 + 收藏 🌟,我们下期再见!

相关文章:

  • Spring笔记03-依赖注入
  • Javaweb后端登录认证 登录校验 过滤器 filter令牌校验,执行流程,拦截路径
  • 业之峰与宏图智能战略携手,开启家装数字化新篇章
  • excel 时间戳 转日期
  • shop搜索需求及测试点
  • 01-Docker 安装
  • 知识图谱之知识抽取:从数据海洋中 “捞金”
  • Plastiform复制胶泥:高精度表面复制与测量的高效工具
  • 如何学习Python编程?
  • Emacs 折腾日记(二十)——修改emacs的一些默认行为
  • 三层交换综合实验
  • 【Java SE】StringBuffer、StringBuilder详解
  • 【C++】C++11介绍列表初始化右值引用和移动语义
  • .js项目编译成.exe程序(交叉编译全过程整理)
  • 在 Ant Design Vue 中实现滚动页面时保持下拉菜单展开
  • Strawberry perl的下载,查询版本号,配置Path环境变量,查找perl解释器的位置
  • 淘宝API与小程序联动:实现“一键转卖”功能开发实战
  • 虚拟电商-话费充值业务(二)话费充值对接供应商模块开发
  • 从虚拟现实到可持续设计:唐婉歆的多维创新之旅
  • 十二、Cluster集群
  • 两部门预拨4000万元支持山西、广西、陕西做好抗旱救灾工作
  • 国务院安委办、应急管理部进一步调度部署“五一”假期安全防范工作
  • 制定出台民营经济促进法有何重大意义?全国人大常委会法工委回应
  • 杨国荣︱学术上的立此存照——《故旧往事,欲说还休》读后
  • 中国体育报关注徐梦桃、王曼昱、盛李豪等获评全国先进工作者:为建设体育强国再立新功
  • 海南儋州市委副书记任延新已赴市人大常委会履新