zvvq
39. 组合和给出一组不同的整数候选者和一个目标整数目标,回到全部唯一的候选者组合目录,其中选定数字之和实现目标。您可以按一切次序回到组成。 内容来自samhan
同一个号能够无限次地从侯选人中挑选。2个组成是唯一的,假如
频率
至少有一个所选数字不同。产生的功能测试促使针对给出键入来讲,总数实现目标的唯一组成总数低于 150 个组成。
实例1: zvvq
键入:侯选人 = [2,3,6,7],目标=7 copyright zvvq
导出:[[2,2,3],[7]] 内容来自zvvq,别采集哟
表明: 本文来自zvvq
2和3是备选,2 + 2 + 3 = 7。留意2能够多次使用。
copyright zvvq
7是候选者,7=7. 内容来自samhan
这是仅存的二种组成。
zvvq好,好zvvq
实例2:键入:侯选人 = [2,3,5],目标=8 内容来自samhan666
导出:[[2,2,2,2],[2,3,3],[3,5]] 内容来自samhan
实例3:键入:侯选人 = [2],目标 = 1
zvvq好,好zvvq
导出:[]限定: copyright zvvq
1 2 候选人的所有元素全是独特的。
1初始页面 本文来自zvvq
这题和昨日处理的题区别不是很大。 内容来自zvvq,别采集哟
BackTracking依然能够很好地检索深层的概率并用循环开展宽度控制。
内容来自samhan
需注意,这里我们可以添加同样元素,随后维持全部组成的独特性 内容来自zvvq,别采集哟
publicList>combinationSum(int[]Candidates, inttarget){ 本文来自zvvq
List>list=newArrayList();
ListComs=newLinkedList();
内容来自samhan
backTracking(目录, 梳子, 候选者, 目标, 0, 0); 内容来自samhan
返回列表;
内容来自zvvq,别采集哟
} 内容来自zvvq,别采集哟
公共失效 backTracking(列表>目录,目录梳,int []候选人,int目标,int总数,int逐渐){
假如(总数>目标){
回到; zvvq.cn
} 内容来自zvvq
假如(总数==目标){
内容来自samhan666
list.add(newArrayList(combs));
copyright zvvq
回到;
} 内容来自samhan
for(inti=start;i
40.组合和II
超出时间期限 本文来自zvvq
Set> set=newHashSet(); 内容来自zvvq
公共列表>组成Sum2(int []候选人,int目标){ zvvq好,好zvvq
ListComs=newLinkedList();
Arrays.sort(备选);
copyright zvvq
backTracking(combs, 目标, 候选者, 0, 0);
回到新的ArrayList(set); zvvq
} 内容来自zvvq
publicvoid backTracking(Listcombs, inttarget, int[]candidates, int start, int sum){
假如(总数>目标){ zvvq
回到; copyright zvvq
}
假如(总数==目标){ zvvq好,好zvvq
set.add(newArrayList(combs)); 内容来自zvvq
} zvvq好,好zvvq
for(inti=start;i目标){
再次;
zvvq
} zvvq
总数+=侯选人[i]; zvvq好,好zvvq
木梳.add(候选者[i]);
内容来自zvvq,别采集哟
backTracking(combs, 目标, 候选者, i+1, sum);
sum-=侯选人[i]; copyright zvvq
木梳.删掉(木梳.size()-1); zvvq
} 本文来自zvvq
} copyright zvvq
因为有一些原素之前已经用过,比如[1,1,1,2,3] 第一次递归中使用了112,可是循环会遍历从1到3开始所有元素,并且存在三个“1”,因此在遇到第二个“1”时,组成112还会寻找,这在此前的递归步骤中已经找到了,所以我们应该降低这种多余的流程(类似地,它还可能发生在递归的遍历和递归的横着递归中。 内容来自zvvq,别采集哟
处理问题 本文来自zvvq
List>list=newArrayList();
公共列表>组成Sum2(int []候选人,int目标){
ListComs=newLinkedList();
Arrays.sort(备选); zvvq.cn
backTracking(combs, 目标, 候选者, 0, 0, false);
zvvq
返回列表; zvvq.cn
}
zvvq
publicvoid backTracking(Listcombs, inttarget, int[]candidates, int start, int sum, booleanHorizon){
内容来自zvvq
假如(总数>目标){
回到;
}
zvvq.cn
假如(总数==目标){ 内容来自zvvq,别采集哟
list.add(newArrayList(combs));
本文来自zvvq
}
内容来自samhan
for(inti=start;i目标){ copyright zvvq
再次;
内容来自samhan666
} zvvq好,好zvvq
if(i!=0&&侯选人[i] == 侯选人[i-1] && 地平线){
copyright zvvq
再次; 内容来自zvvq,别采集哟
}
内容来自zvvq
总数+=侯选人[i];
木梳.add(候选者[i]);
backTracking(combs, 目标, 候选者, i+1, sum, false);
sum-=侯选人[i]; 本文来自zvvq
木梳.删掉(木梳.size()-1);
zvvq
地平线=真;
}
} zvvq
131. 回文分区给出一个字符串 s,对 s开展分区促使每个
子串 copyright zvvq
分区的是 copyright zvvq
回文 本文来自zvvq
。回到 s.所有可能的回文区划实例1:
键入:s="aab" zvvq好,好zvvq
导出:[["a","a","b"],["aa","b"]] zvvq
实例2:键入:s = "a"
本文来自zvvq
导出:[["a"]]限定: 内容来自samhan666
1 s仅包含小写英语字母。
初始页面 zvvq
List>list=newArrayList(); 内容来自zvvq
公共列表>分区(字符串s){ zvvq
List 梳=newArrayList(); 内容来自zvvq,别采集哟
backTracking(combs, newStringBuilder(s), 0);
zvvq
返回列表;
} zvvq好,好zvvq
公共失效 backTracking(List 木梳,StringBuilder str,int start){
内容来自samhan
if(start== str.length()){
内容来自zvvq
list.add(newArrayList(combs)); zvvq.cn
回到;
内容来自zvvq
} zvvq.cn
for(inti=1;i+start
内容来自samhan
以上就是LeetCode DayBackTracking 第 2 部分的详细内容,大量请关注其他类似文章! 本文来自zvvq