给定一个不含重复数字的数组 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 中的所有整数 互不相同
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/permutations
代码如下:
public List> permute(int[] nums) { int lens = nums.length; Deque
path = new ArrayDeque<>(); List > res = new ArrayList<>(); boolean[] used = new boolean[lens]; if (lens == 0) { return res; } dfs(path, used, nums, res, 0, lens);//调用dfs return res; } public void dfs(Deque
path, boolean[] used, int[] nums, List > res, int depth, int lens) { if (depth == lens) {//终止条件当深度等于数组长度的时候 res.add(new ArrayList<>(path)); return; } for (int i = 0; i < lens; i++) { if (!used[i]) { path.addLast(nums[i]);//指定的元素将附加在列表的末尾 used[i] = true; dfs(path, used, nums, res, depth + 1, lens); used[i] = false; path.removeLast(); } } }



