トピックリンク:LeeCode46完全配置
トピックの説明:
剪定がない限り、最も単純な詳細検索で、一致したすべての解が返されます。唯一の落とし穴は、サンプルに負の数があることです。私が判断したブール配列前にエラーを報告します、マップに変更するだけです
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);
}