一、题目描述
来源:力扣(LeetCode)
给定一个不含重复数字的数组 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
中的所有整数 互不相同
二丶思路分析
**回溯**
比较典型的回溯问题,就不再说多了,直接开干
三、代码实现
public class Solution { public List<List<Integer>> permute(int[] nums) { int length = nums.length; List<List<Integer>> res = new ArrayList<>(); if (length ==0) { return res; } boolean[] used = new boolean[length]; List<Integer> path = new ArrayList<>(); dfs(nums, length, 0, path, used, res); return res; } private void dfs(int[] nums, int len, int depth, List<Integer> path, boolean[] used, List<List<Integer>> res) { if (depth == len) { res.add(path); return; } for (int i =0; i < len; i++) { if (!used[i]) { List<Integer> newPath = new ArrayList<>(path); newPath.add(nums[i]); boolean[] newUsed = new boolean[len]; System.arraycopy(used, 0, newUsed, 0, len); newUsed[i] =true; dfs(nums, len, depth +1, newPath, newUsed, res); } } } }
复杂度分析
- 时间复杂度:
网络异常,图片无法展示|
n
为序列的长度 - 空间复杂度:
网络异常,图片无法展示|
运行结果
网络异常,图片无法展示
|
总结
回溯问题是一个十分常见的问题,并且用途也是十分的广泛,我们一定要理解他的核心思想,并熟练掌握。
继续加油~~