您的位置:首页 > 其它

Combination Sum III

2015-07-07 10:55 337 查看
public class Solution {
public List<List<Integer>> combinationSum3(int k, int n) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if (k < 1 || k > 9 || n > (19 - k) * k / 2) {
return result;
}
List<Integer> level = new ArrayList<Integer>();
dfs(result, level, 1, n, k);
return result;
}
private void dfs(List<List<Integer>> result, List<Integer> level, int start, int sum, int length) {
if (sum == 0 && level.size() == length) {
result.add(new ArrayList<Integer>(level));
return;
}
for (int i = start; i <= 9; i++) {
//剪枝
if (sum < 0) {
break;
}
if (level.size() > length) {
break;
}
level.add(i);
dfs(result, level, i + 1, sum - i, length);
level.remove(level.size() - 1);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Array Backtracking