46. 全排列(中)

发布时间 2023-12-31 12:43:34作者: Frommoon

题目

  • 给定一个不含重复数字的数组 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]]

题解:回溯

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        #nums是选择列表
        def backtrack(nums: List[int], track: List[int], res: List[List[int]]):
            if len(track) == len(nums):#触发结束条件:nums中的元素全都在track中出现
                res.append(track[:])  # 将路径加入结果
                return
            for i in range(len(nums)):
                if nums[i] in track:#排除不合法选择
                    continue
                track.append(nums[i])#做选择
                backtrack(nums, track, res)#递归
                track.pop()  # 撤销选择

        res = []  # 结果
        track = []  # 路径
        backtrack(nums, track, res)
        return res