题目链接:LeeCode46全排列
题目描述:
最简单的深搜,没有剪枝只要遍历到就行返回所有配对出来的解,唯一一个坑点就是样例里面有负数,我之前用来判断的boolean数组会报错,改成map就好了
public static List<List<Integer>> permute(int[] nums) {
List<List<Integer>> lists = new ArrayList<>();
Map<Integer,Boolean> map=new HashMap<>();
for (int i = 0; i < nums.length; i++) {
map.put(nums[i],true);
}
for (int i = 0; i < nums.length; i++) {
List<Integer> list=new ArrayList<>();
list.add(nums[i]);
map.put(nums[i],false );
dfs(nums,1,lists,list,map);
map.put(nums[i],true );
}
return lists;
}
public static void dfs(int[] nums,int step,List<List<Integer>> lists,List<Integer> list,Map<Integer,Boolean> map){
if (step >= nums.length) {
List<Integer> list1=new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
list1.add(list.get(i));
}
lists.add(list1);
list.remove(list.size()-1);
return;
}
for (int i = 0; i < nums.length; i++) {
if(map.get(nums[i])==true){
list.add(nums[i]);
map.put(nums[i],false);
dfs(nums, step+1, lists, list, map);
map.put(nums[i],true);
}
}
list.remove(list.size()-1);
}