首页 > 其他 > 详细

39. 组合总和

时间:2020-12-13 20:38:42      阅读:23      评论:0      收藏:0      [点我收藏+]

题目:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
所有数字(包括 target)都是正整数。
解集不能包含重复的组合。

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

代码: //回溯法,每次回到当前根节点
class Solution {
public List<List> combinationSum(int[] candidates, int target) {
var list=new ArrayList<List>();
var arr=new ArrayList(); //先排序,每次叠加可以从i开始,这样可以避免产生重复数组列表
int sum=0;
Arrays.sort(candidates);
backTrack(list,arr,candidates,target,sum,0);

return list;
}
public  static void backTrack(List<List<Integer>> alist,List<Integer> arr,int[] acandidates, int atarget,int sum,int t){  //t记录当前为第几个数,,i要不小于t
    if(sum==atarget){
        var temp=new ArrayList<Integer>(arr);
        if(!alist.contains(temp)){
        alist.add(temp);}
    }
    if(sum<atarget){
        for(int i=t;i<acandidates.length;i++){
            sum+=acandidates[i];
             if(sum<=atarget){
                 arr.add(acandidates[i]);
                 backTrack(alist,arr,acandidates,atarget,sum,i);
                 arr.remove(arr.size()-1) ; }  //数字和小于目标数             
            sum-=acandidates[i];              
        }
    }
}

}

技术分享图片

39. 组合总和

原文:https://www.cnblogs.com/SEU-ZCY/p/14128998.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!