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