跳至主要內容

216. 组合总和 III

T4mako算法数组回溯小于 1 分钟

216. 组合总和 III

中等

题目描述open in new window

解题思路:
建立递归函数,在上一次递归所去得的数的后一位开始取数
剪枝的条件为取得的数超过 n,取的数个数大于 k

class Solution {

    List<List<Integer>> res = new ArrayList<>();

    public List<List<Integer>> combinationSum3(int k, int n) {
        combine(k,n,1,new ArrayList<Integer>(),0);
        return res;
    }

    public void combine(int k,int n,int start,List<Integer> list,int sum){
        int len = list.size();
        // 长度太长,没有额外可选数字,直接返回
        if(len > k || start > 9) return;
        // 遍历
        for (int i = start; i < 10; i++) {
            // 成立的情况
            if(sum + i == n && list.size() == k - 1){
                List<Integer> l = new ArrayList<>(list);
                l.add(i);
                res.add(l);
                break;
            } else if (sum + i >= n) { //剪枝
                break;
            
            } else {// 递归
                List<Integer> l = new ArrayList<>(list);
                l.add(i);
                combine(k,n,i + 1,l,sum + i);
            }
        }
    }
}
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5