力扣中77 组合

单句return;的用法:

 

 

上午看了题解 下午照猫画虎的

public List<List<Integer>> combine(int n, int k) {
//        List<List<Integer>> res=new ArrayList<>();  //这两句等价
        List<List<Integer>> res=new ArrayList<List<Integer>>();
        if(k<0||n<k) { //这个判断根本没有想
            return res;
        }
        Deque<Integer> path=new ArrayDeque<>();//这里的ArrayDeque
        dfs(n,k,1,path,res);
        return res;
        
    }

    private void dfs(int n, int k, int begin, Deque<Integer> path, List<List<Integer>> res) {
        if(path.size()==k) {
            res.add(new ArrayList<>(path));//这个传参什么的 需要在这块新建 才能传入
            return;  //这里不加return;为啥不报错  加return后面部分不执行了 ex这个for 
               //加两个输出调试发现会出现栈里面大于3的情况 不会出错是因为没有输出 
               //只输出三个的 但是会有重复的 为什么重复的不会错 但是一加下一行剪枝就会出错
        }
        for(int i=begin;i<=n-(k-path.size())+1;i++) {//剪枝
            path.addLast(i);
            System.out.println("递归之前 => " + path);
            dfs(n,k,i+1,path,res);//这里k不变因为最后比长度的时候包含了前面塞入的
            path.removeLast();
            System.out.println("递归之hou => " + path);
        }
    }

 

posted @ 2023-03-14 16:07  Ssshiny  阅读(37)  评论(0)    收藏  举报