长弓smile的博客

大家好,请多指教

组合总和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);             
            }
        }
    }
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012485480/article/details/79966695
个人分类: 剑指offer
想对作者说点什么? 我来说一句

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

不良信息举报

组合总和II

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭