Given a set of candidate numbers (candidates
) (without duplicates) and a target number (target
), find all unique combinations in candidates
where the candidate numbers sums to target
.
The same repeated number may be chosen from candidates
unlimited number of times.
Note:
- All numbers (including
target
) will be positive integers. - The solution set must not contain duplicate combinations.
Example 1:
Input: candidates = [2,3,6,7], target = 7, A solution set is: [ [7], [2,2,3] ]
Example 2:
Input: candidates = [2,3,5], target = 8, A solution set is: [ [2,2,2,2], [2,3,3], [3,5] ]
题目链接:https://leetcode.com/problems/combination-sum/
题目分析:
DFS暴力直接搞
8ms,时间击败89%
class Solution {
public void DFS(int pos, int curSum, int[] candidates, int target, List<Integer> tmp, List<List<Integer>> ans) {
if (pos == candidates.length) {
if (curSum == target) {
ans.add(new ArrayList<Integer>(tmp));
}
return;
}
for (int i = 0; i * candidates[pos] <= target - curSum; i++) {
for (int j = 0; j < i; j++) {
tmp.add(candidates[pos]);
}
DFS(pos + 1, curSum + i * candidates[pos], candidates, target, tmp, ans);
for (int j = 0; j < i; j++) {
tmp.remove(tmp.size() - 1);
}
}
}
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> ans = new ArrayList<>();
DFS(0, 0, candidates, target, new ArrayList<Integer>(), ans);
return ans;
}
}