Merge pull request #85 from Joshua-Lu/patch-3

更新 0216.组合总和III Java版本
This commit is contained in:
Carl Sun
2021-05-14 09:42:29 +08:00
committed by GitHub

View File

@ -229,24 +229,33 @@ public:
Java
```java
class Solution {
private List<Integer> path = new ArrayList<>();
private List<List<Integer>> res = new ArrayList<>();
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>();
public List<List<Integer>> combinationSum3(int k, int n) {
backtracking(k, n, 1);
res.clear();
list.clear();
backtracking(k, n, 9);
return res;
}
private void backtracking (int k, int count, int start) {
if (count == 0 && k == 0) {
res.add(new ArrayList<>(path));
private void backtracking(int k, int n, int maxNum) {
if (k == 0 && n == 0) {
res.add(new ArrayList<>(list));
return;
}
for (int i = start; i <= 9; i++) {
path.add(i);
backtracking(k - 1, count - i, i + 1);
path.remove(path.size() - 1);
// 因为不能重复并且单个数字最大值是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);
}
}