全排列——交换的思想

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

复制代码
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:

复制代码
输入:nums = [0,1]
输出:[[0,1],[1,0]]

示例 3:

复制代码
输入:nums = [1]
输出:[[1]]

思路:最后存在result一定是pai.copy(),因为所有的pai即便是传参也是相当于同一个对象(就是只是地址)。

比较巧妙的在于可以通过交换元素,来控制还未选择的元素都集中在nums数组后半部分。

python 复制代码
class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        result = []
        pai=list()
        def dfs(first:int):
            if first==len(nums):
                result.append(pai.copy())
                return
            for i in range(first,len(nums)):
                pai.append(nums[i])
                nums[first] ,nums[i]= nums[i],nums[first]
                dfs(first+1)
                pai.pop()
                nums[first] ,nums[i]= nums[i],nums[first]

        dfs(0)
        return result
相关推荐
少许极端1 分钟前
算法奇妙屋(十五)-BFS解决边权为1的最短路径问题
数据结构·算法·bfs·宽度优先·队列·图解算法·边权为1的最短路径问题
zqy02272 分钟前
python安装与环境配置
开发语言·python
star learning white8 分钟前
xmC语言10
c语言·开发语言
拼好饭和她皆失10 分钟前
Java学习---Arrays类
java·开发语言·学习
Dev7z12 分钟前
基于MATLAB小波变换的音频水印算法研究与实现
开发语言·matlab·音视频
代码游侠13 分钟前
学习笔记——GDB调试工具
linux·开发语言·笔记·学习
c骑着乌龟追兔子13 分钟前
Day 27 常见的降维算法
人工智能·算法·机器学习
Wise玩转AI14 分钟前
从LLM到Agent:技术迁移的必然趋势
人工智能·python·语言模型·ai智能体
hetao173383715 分钟前
2025-12-02~03 hetao1733837的刷题记录
c++·算法