1. 题目:
给定一个不含重复数字的数组 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]]
2. 我的代码:
class Solution: def permute(self, nums: List[int]) -> List[List[int]]: # 回溯 path = [] result = [] def backtracking(rest): # 终止条件 if rest == []: result.append(path[:]) for i in range(len(rest)): path.append(rest[i]) backtracking(rest[:i] + rest[i + 1:]) path.pop() backtracking(nums) return result
利用回溯算法,可以求得各个情况下的全排列。
在path为空时达到终止条件,同时记录此时的排列顺序。回溯过程如果按照树状表达,则为下图:
每次递归都只扣掉一个当前元素,其余部分继续拼接好传给backtracking
进行递归。