Leetcode-回溯(全排列)

57 阅读1分钟

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

回溯法:一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试。

class Solution:
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        def backtrack(first=0):
            # 如果所有数字都已使用,将当前排列添加到结果中
            if first == n:
                res.append(nums[:])
            for i in range(first, n):
                # 交换当前元素与第一个元素
                nums[first], nums[i] = nums[i], nums[first]
                # 递归生成下一个位置的排列
                backtrack(first + 1)
                # 撤销交换操作(回溯),以便尝试其他可能性
                nums[first], nums[i] = nums[i], nums[first]

        n = len(nums)
        res = []
        backtrack()
        return res