全排列——交换的思想

给定一个不含重复数字的数组 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
相关推荐
重启编程之路8 小时前
python基础之进程学习
python
程序员大雄学编程8 小时前
定积分的几何应用(一):平面图形面积计算详解
开发语言·python·数学·平面·微积分
Evand J8 小时前
【MATLAB例程】二维平面的TOA定位,几何精度因子GDOP和克拉美罗下界CRLB计算与输出
开发语言·matlab·平面·crlb·gdop
小兵张健8 小时前
Java + Spring 到 Python + FastAPI (一)
java·python·spring
草莓火锅9 小时前
用c++求第n个质数
开发语言·c++·算法
snakecy9 小时前
自然语言处理(NLP)算法原理与实现--Part 1
人工智能·算法·自然语言处理
aniden9 小时前
Swagger从入门到实战
java·开发语言·spring
萌新彭彭9 小时前
vLLM主要模块Scheduler详解
算法·源码阅读
灵动小溪9 小时前
时频信号分析总结
算法
CoovallyAIHub9 小时前
让Qwen-VL的检测能力像YOLO一样强,VLM-FO1如何打通大模型的视觉任督二脉
深度学习·算法·计算机视觉