46.全排列
给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
1 2
| 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
|
示例 2:
1 2
| 输入:nums = [0,1] 输出:[[0,1],[1,0]]
|
示例 3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| class Solution {
private List<Integer> path=new ArrayList<>(); private boolean[] onPath; private final List<List<Integer>> ans = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) { onPath = new boolean[nums.length]; dfs(0,nums); return ans; }
private void dfs(int i,int [] nums) { if (i == nums.length) { ans.add(new ArrayList<>(path)); return; }
for (int j = 0; j < nums.length; ++j) { if (!onPath[j]) { path.add(nums[j]); onPath[j] = true; dfs(i + 1,nums); path.remove(path.size()-1); onPath[j] = false; } } } }
|