216.组合总和

83 阅读1分钟

216.组合总和

找出所有相加之和为nk个数的组合,且满足下列条件:
只使用数字1到9 / 每个数字最多使用一次 / 不能包含相同的组合两次。

class Solution {
    LinkedList<Integer> path = new LinkedList<>();
    List<List<Integer>> result = new ArrayList<>();
    public List<List<Integer>> combinationSum3(int k, int n) {
        build(k, n, 1, 0);
        return result;
    }
    public void build(int k, int n, int startIndex, int sum){
        if(sum > n) return;
        if(path.size() > k) return;//size后的括号别忘了
        if(sum == n && path.size() == k){
            result.add(new ArrayList(path));
            return;
        }
        for(int i = startIndex; i <= 9; i++){
            path.add(i);
            sum += i;
            build(k, n, i+1, sum);
            sum -= i;
            path.removeLast();
        }
    }
}