216. 组合总和III

回溯

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

class Solution {

    List<List<Integer>> list = new ArrayList<>();
    LinkedList<Integer> li = new LinkedList<>();

    public List<List<Integer>> combinationSum3(int k, int n) {

        backtracking(k, n, 1);
        return list;
    }

    public void backtracking(int k, int n, int startIndex){

        /**
         * 终止条件
         */
        if (li.size() == k && n == 0) {

            list.add(new ArrayList<>(li));
            return;
        }

        /**
         * 如果个数为k但是n不为0,说明不满足条件
         */
        if (li.size() == k){
            return;
        }

        /**
         * 减枝
         */
        for (int i = startIndex; i <= 9 - (k - li.size()) + 1; i++) {

            li.add(i);
            backtracking(k, n - i, i + 1);
            li.removeLast();
        }
    }
}

/**
 * 时间复杂度 O(((n/k)×k)
 * 空间复杂度 O(k)
 */

https://leetcode-cn.com/problems/combination-sum-iii/

posted @ 2022-01-12 10:37  振袖秋枫问红叶  阅读(34)  评论(0)    收藏  举报