回溯算法。
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> res = new ArrayList();
Stack<Integer> path = new Stack();
int pathSum = 0;
dfs(candidates,target,res,path,pathSum,0);
return res;
}
public void dfs(int[] candidates,int target,List res,Stack path,int pathSum,int cur){
if(pathSum > target ){
return;
}
if(pathSum == target){
res.add(new ArrayList(path));
return;
}
for(int i = cur; i < candidates.length; i++){
pathSum+=candidates[i];
path.push(candidates[i]);
dfs(candidates,target,res,path,pathSum,i);
pathSum-=candidates[i];
path.pop();
}
}
}