diff --git a/problems/0216.组合总和III.md b/problems/0216.组合总和III.md index 11a8eb8f..38af4c86 100644 --- a/problems/0216.组合总和III.md +++ b/problems/0216.组合总和III.md @@ -227,7 +227,38 @@ public: Java: +```java +class Solution { + List> res = new ArrayList<>(); + List list = new ArrayList<>(); + public List> combinationSum3(int k, int n) { + res.clear(); + list.clear(); + backtracking(k, n, 9); + return res; + } + + private void backtracking(int k, int n, int maxNum) { + if (k == 0 && n == 0) { + res.add(new ArrayList<>(list)); + return; + } + + // 因为不能重复,并且单个数字最大值是maxNum,所以sum最大值为 + // (maxNum + (maxNum - 1) + ... + (maxNum - k + 1)) == k * maxNum - k*(k - 1) / 2 + if (maxNum == 0 + || n > k * maxNum - k * (k - 1) / 2 + || n < (1 + k) * k / 2) { + return; + } + list.add(maxNum); + backtracking(k - 1, n - maxNum, maxNum - 1); + list.remove(list.size() - 1); + backtracking(k, n, maxNum - 1); + } +} +``` Python: