LeetCode-【数组】- 组合总和

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

  • 所有数字(包括 target)都是正整数。
  • 解集不能包含重复的组合。 

示例 1:

输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[
  [7],
  [2,2,3]
]

示例 2:

输入: candidates = [2,3,5], target = 8,
所求解集为:
[
  [2,2,2,2],
  [2,3,3],
  [3,5]
]

题解:如果数组元素不能重复使用,只要用深搜遍历所有情况就行了,但题目允许数组元素重复,其实这和不能重复使用数组元素求和,只不过是在进行下一次递归开始位置变一下就行了。

不能重复使用数组元素:dfs(res,tmp,nums,i+1,n-nums[i],k);

能重复使用数组元素:dfs(res,tmp,nums,i,n-nums[i],k);

class Solution {
    public List> combinationSum(int[] candidates, int target) {
        Arrays.sort(candidates);
        List> res=new ArrayList<>();
        dfs(res,new ArrayList<>(),candidates,0,target);
        return res;
    }
    public static void dfs(List> res,List tmp,int[] candidates,int s,int target){
        if(target<0)
            return;
        if(target==0){
            res.add(new ArrayList<>(tmp));
            return;
        }
        for(int i=s;i

 

你可能感兴趣的:(LeetCode,Java,DFS(深度优先算法))