您的位置:首页 > 其它

LeetCode 216 Combination Sum III

2016-05-16 16:17 375 查看
Find all possible combinations of k numbers that add up to a number n, given that only numbers
from 1 to 9 can be used and each combination should be a unique set of numbers.
Ensure that numbers within the set are sorted in ascending order.

Example 1:
Input: k = 3, n = 7
Output:

[[1,2,4]]


Example 2:
Input: k = 3, n = 9
Output:

[[1,2,6], [1,3,5], [2,3,4]]


public List<List<Integer>> combinationSum3(int k, int n) {
List<List<Integer>> result = new LinkedList<List<Integer>>();
List<Integer> tmp = new ArrayList<Integer>();
dfs(1, k, n, tmp, result);
return result;
}

private void dfs(int begin, int k, int rest, List<Integer> tmp, List<List<Integer>> result) {
/**注意这个终止条件*/
if (rest == 0 && k == 0)
/**tmp是变动的,所以此处需要new一个*/
result.add(new ArrayList<Integer>(tmp));
/*分别i开始往下深搜*/
for (int i = begin; i <= 9 && i <= rest; i++) {
tmp.add(i);
dfs(i + 1, k - 1, rest - i, tmp, result);//搜索下个数字
tmp.remove(tmp.size() - 1);//回溯
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: