全排列——交换的思想

给定一个不含重复数字的数组 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
相关推荐
JieE2122 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
星云穿梭9 小时前
用Python写一个带图形界面的学生管理系统——完整教程
python
Jack209 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
金銀銅鐵10 小时前
用 Pygame 实现 15 puzzle
python·数学·游戏
小小杨树11 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
黄忠15 小时前
大模型之LangGraph技术体系
python·llm
JieE2121 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2121 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
hboot1 天前
AI工程师第二课 - 数据处理
人工智能·python·数据分析