回溯法求解组合问题

题目:

 典型的回溯算法问题,就是在一颗决策树上一直做选择,没有可以选择的时候就撤销选择,

class Solution {
    List<List<Integer>> res=new ArrayList<>();
    public List<List<Integer>> combine(int n, int k) {
        if(n<=0 || k<=0) return res;
        List<Integer> list=new ArrayList<>();
        zuhe(n,k,1,list);
        return res;
    }

    public void zuhe(int n,int k,int index,List<Integer> list){
        if(list.size()==k){
            //到达结果数
            res.add(new ArrayList<Integer>(list));
            return;
        }
        for(int i=index;i<=n;i++){
            list.add(i); //做选择
            zuhe(n,k,i+1,list);  //继续做下一步选择
            list.remove(list.size()-1); //撤销选择
        }
    }

}

 

©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页