给定一个不含重复数字的数组 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]]
提示:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums
中的所有整数 互不相同
回溯法:一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试。
方法:回溯
问题等价:有 n 个排列成一行的空格,需要从左往右依此填入给定的 n 个数,每个数只能使用一次。——> 穷举法,从左往右每一个位置都依此尝试填入一个数,看能不能填完这 n 个空格,可以用「回溯法」来模拟这个过程。
定义递归函数 backtrack(first, output) 表示从左往右填到第 first 个位置,当前排列为 output。 那么整个递归函数分为两个情况:
- 如果 first==n,说明我们已经填完了 n 个位置(注意下标从 0 开始),找到了一个可行的解,将 output 放入答案数组中,递归结束。
- 如果 first<n,要考虑这第 first 个位置要填哪个数。根据题目要求不能填已经填过的数,因此很容易想到的一个处理手段是定