全排列
1.题目
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
2.分析
使用dfs进行全排列,注意一定要回溯的时候移除之前的数!
3.代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { private List<List<Integer>> ans = new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { List<Integer> temp = new ArrayList<>(); dfs(nums,temp); return ans; } private void dfs(int[] nums,List<Integer> temp){ if(temp.size()==nums.length){ ans.add(new ArrayList<>(temp)); return; } for (int num : nums) { if(!temp.contains(num)){ temp.add(num); dfs(nums,temp); temp.remove(temp.size()-1); } }
} }
|