组合总和II

给定一个无重复元素的数组 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]
]

思路描述:
1.其实采用的还是递归回溯的思想
2.对每个数都是使用或者不使用,计算和,满足条件时添加到列表

class Solution {
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        cal(list,new ArrayList<Integer>(),candidates,target,0,0);
        return list;     
    }
    private void cal(List<List<Integer>> list, ArrayList<Integer> tempList,
            int[] candidates, int target,int cur,int begin) {
        // TODO Auto-generated method stub
        if((cur == target)&&(tempList.size()>0)){               
            list.add(new ArrayList<Integer>(tempList));                 
        }else if(cur>target){
            return ;
        }else{
            for(int i = begin;i<candidates.length;i++){
                tempList.add(candidates[i]);
                cal(list,tempList,candidates,target,cur+candidates[i],i);
                tempList.remove(tempList.size()-1);             
            }
        }
    }
}

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试