全排列——交换的思想

给定一个不含重复数字的数组 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
相关推荐
qq_33003799几秒前
php怎么实现接口请求日志记录_php如何自动记录入参出参与耗时
jvm·数据库·python
Python私教2 分钟前
Hermes Agent 记忆系统详解:MEMORY.md 与跨会话持久化
python
2401_865382502 分钟前
各省政务信息化项目验收材料清单汇总及差异分析
java·开发语言·数据库
froginwe116 分钟前
MySQL 删除数据库
开发语言
Rust研习社6 分钟前
深入浅出 Rust 泛型:从入门到实战
开发语言·后端·算法·rust
pele8 分钟前
如何用 contextmenu 事件自定义鼠标右键菜单的显示逻辑
jvm·数据库·python
2301_773553629 分钟前
怎样禁用phpMyAdmin的控制台历史记录_防凭证与查询留存
jvm·数据库·python
m0_7436239210 分钟前
Go语言怎么实现生产者消费者_Go语言生产者消费者模式教程【精通】
jvm·数据库·python
baidu_3409988211 分钟前
CSS Grid布局如何为特定项目指定位置_使用grid-row和grid-column
jvm·数据库·python
数智工坊12 分钟前
R-CNN目标检测算法精读全解
网络·人工智能·深度学习·算法·目标检测·r语言·cnn