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.
Note:
- All numbers will be positive integers.
- The solution set must not contain duplicate combinations.
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]]
题目链接: https://leetcode.com/problems/combination-sum-iii/
题目分析:水题,DFS的时候倒着求以减少参数个数
class Solution {
public void DFS(int k, int n, int st, List<Integer> nums, List<List<Integer>> ans) {
if (k == 0) {
if (n == 0) {
ans.add(new ArrayList<Integer>(nums));
}
return;
}
for (int i = st; i <= 9; i++) {
if (n - i < 0) {
return;
}
nums.add(i);
DFS(k - 1, n - i, i + 1, nums, ans);
nums.remove(nums.size() - 1);
}
}
public List<List<Integer>> combinationSum3(int k, int n) {
List<Integer> nums = new ArrayList<>();
List<List<Integer>> ans = new ArrayList<>();
DFS(k, n, 1, nums, ans);
return ans;
}
}