首页 > 其他分享 >day24 77

day24 77

时间:2022-10-16 22:00:09浏览次数:37  
标签:return int day24 77 startIndex result new path

回溯算法 数字组合问题

77. 组合

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    LinkedList<Integer> path = new LinkedList<>();
    public List<List<Integer>> combine(int n, int k) {
        combinefun(n,k,1);
        return result;
    }

    public void combinefun(int n,int k,int startIndex){
        if(path.size()==k){
            result.add(new ArrayList<>(path));
            return;
        }
        for(int i=startIndex;i<= n - (k - path.size()) + 1;i++){//也可以写成 n,但是这样会多做无用功,增大时间复杂度。
            path.add(i);
            combinefun(n,k,i+1);   
            path.removeLast();      //减枝
        }
    }
}

216. 组合总和 III

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    LinkedList<Integer> path = new LinkedList<>();
    
    public List<List<Integer>> combinationSum3(int k, int n) {
        combinefun(n,k,1,0);
        return result;
    }
     public void combinefun(int n,int k,int startIndex,int sum){
        if(sum>n) return; //如果和大于n那就结束 往后继续没有意义 
        if(sum==n&&path.size()==k){
            result.add(new ArrayList<>(path));
            return;
        }
        for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) {
            path.add(i);
            sum+=i;
            combinefun(n,k,i+1,sum);
            path.removeLast();//减枝 
            sum-=i;   //回溯 是sum也要减回去
        }
    }
}

标签:return,int,day24,77,startIndex,result,new,path
From: https://www.cnblogs.com/wdnmdp/p/16797352.html

相关文章