LeeCode46全排列(Java)(dfs)

题目链接: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);
    }

猜你喜欢

转载自blog.csdn.net/weixin_43590593/article/details/112562196
今日推荐