回溯法求解组合问题

题目:

回溯法求解组合问题_第1张图片

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

回溯法求解组合问题_第2张图片

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

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

}

 

你可能感兴趣的:(leecode,算法)