题目链接
法一(回溯)
public class Solution216 {
private List<List<Integer>> ans;
private List<Integer> path;
private int sum;
public Solution216() {
this.ans = new LinkedList<>();
this.path = new LinkedList<>();
this.sum = 0;
}
private void backtracking(int k, int n, int start) {
if (sum > n) {
return;
}
if (path.size() == k) {
if (sum == n) {
ans.add(new LinkedList<>(path));
}
return;
}
for (int i = start; i <= 10 - (k - path.size()); i++) {
sum += i;
path.add(i);
backtracking(k, n, i + 1);
sum -= i;
path.remove(path.size() - 1);
}
}
public List<List<Integer>> combinationSum3(int k, int n) {
backtracking(k, n, 1);
return ans;
}
}
本地测试
lay.showTitle(216);
Solution216 sol216 = new Solution216();
int k216 = 3, n216 = 9;
List<List<Integer>> ans216 = sol216.combinationSum3(k216, n216);
arrayOpt.showIntLists(ans216);