zvvq技术分享网

LeetCode DayBackTracking 第 2 部分(leetcode周赛规则)

作者:zvvq博客网
导读39. 组合和 给定一组不同的整数候选者和一个目标整数目标,返回所有唯一的候选者组合的列表,其中所选数字之和达到目标。您可以按任何顺序返回组合。 同一个号码可以无限次地从

内容来自samhan

39. 组合和给出一组不同的整数候选者和一个目标整数目标,回到全部唯一的候选者组合目录,其中选定数字之和实现目标。您可以按一切次序回到组成。 内容来自samhan

同一个号能够无限次地从侯选人中挑选。2个组成是唯一的,假如

zvvq

频率

本文来自zvvq

至少有一个所选数字不同。产生的功能测试促使针对给出键入来讲,总数实现目标的唯一组成总数低于 150 个组成。 本文来自zvvq

实例1:

zvvq

键入:侯选人 = [2,3,6,7],目标=7

本文来自zvvq

导出:[[2,2,3],[7]] 内容来自zvvq,别采集哟

表明: copyright zvvq

2和3是备选,2 + 2 + 3 = 7。留意2能够多次使用。

内容来自samhan

7是候选者,7=7.

内容来自zvvq,别采集哟

这是仅存的二种组成。

内容来自samhan

实例2:键入:侯选人 = [2,3,5],目标=8 zvvq

导出:[[2,2,2,2],[2,3,3],[3,5]] zvvq好,好zvvq

实例3:键入:侯选人 = [2],目标 = 1 本文来自zvvq

导出:[]限定: zvvq.cn

1 2 候选人的所有元素全是独特的。

内容来自zvvq,别采集哟

1初始页面

内容来自zvvq,别采集哟

这题和昨日处理的题区别不是很大。 zvvq好,好zvvq

BackTracking依然能够很好地检索深层的概率并用循环开展宽度控制。

本文来自zvvq

需注意,这里我们可以添加同样元素,随后维持全部组成的独特性

内容来自zvvq

publicList>combinationSum(int[]Candidates, inttarget){ copyright zvvq

List>list=newArrayList();

内容来自zvvq,别采集哟

ListComs=newLinkedList();

内容来自zvvq,别采集哟

backTracking(目录, 梳子, 候选者, 目标, 0, 0);

copyright zvvq

返回列表;

内容来自zvvq,别采集哟

} 本文来自zvvq

公共失效 backTracking(列表>目录,目录梳,int []候选人,int目标,int总数,int逐渐){

zvvq.cn

假如(总数>目标){ 本文来自zvvq

回到; zvvq好,好zvvq

} 本文来自zvvq

假如(总数==目标){ 内容来自samhan666

list.add(newArrayList(combs)); 内容来自zvvq,别采集哟

回到; 内容来自samhan666

}

内容来自samhan

for(inti=start;i 内容来自samhan666

40.组合和II

内容来自zvvq

超出时间期限

copyright zvvq

Set> set=newHashSet(); zvvq好,好zvvq

公共列表>组成Sum2(int []候选人,int目标){

zvvq

ListComs=newLinkedList(); copyright zvvq

Arrays.sort(备选);

内容来自zvvq,别采集哟

backTracking(combs, 目标, 候选者, 0, 0);

内容来自zvvq

回到新的ArrayList(set); zvvq

}

内容来自zvvq,别采集哟

publicvoid backTracking(Listcombs, inttarget, int[]candidates, int start, int sum){

内容来自zvvq

假如(总数>目标){

内容来自zvvq

回到; zvvq

} copyright zvvq

假如(总数==目标){

内容来自zvvq

set.add(newArrayList(combs)); zvvq

}

内容来自samhan666

for(inti=start;i目标){

zvvq.cn

再次;

本文来自zvvq

}

内容来自zvvq

总数+=侯选人[i];

zvvq.cn

木梳.add(候选者[i]);

copyright zvvq

backTracking(combs, 目标, 候选者, i+1, sum);

zvvq.cn

sum-=侯选人[i]; 内容来自zvvq,别采集哟

木梳.删掉(木梳.size()-1); zvvq.cn

}

内容来自zvvq,别采集哟

} 内容来自samhan

因为有一些原素之前已经用过,比如[1,1,1,2,3] 第一次递归中使用了112,可是循环会遍历从1到3开始所有元素,并且存在三个“1”,因此在遇到第二个“1”时,组成112还会寻找,这在此前的递归步骤中已经找到了,所以我们应该降低这种多余的流程(类似地,它还可能发生在递归的遍历和递归的横着递归中。

内容来自zvvq,别采集哟

处理问题 zvvq.cn

List>list=newArrayList(); 内容来自samhan666

公共列表>组成Sum2(int []候选人,int目标){

内容来自samhan666

ListComs=newLinkedList(); zvvq

Arrays.sort(备选); zvvq.cn

backTracking(combs, 目标, 候选者, 0, 0, false); copyright zvvq

返回列表; 本文来自zvvq

}

zvvq

publicvoid backTracking(Listcombs, inttarget, int[]candidates, int start, int sum, booleanHorizon){

copyright zvvq

假如(总数>目标){

内容来自zvvq

回到; 内容来自zvvq

}

内容来自samhan

假如(总数==目标){ zvvq.cn

list.add(newArrayList(combs)); zvvq.cn

} copyright zvvq

for(inti=start;i目标){ zvvq.cn

再次;

本文来自zvvq

}

zvvq

if(i!=0&&侯选人[i] == 侯选人[i-1] && 地平线){ 内容来自samhan666

再次;

copyright zvvq

}

copyright zvvq

总数+=侯选人[i]; 内容来自samhan666

木梳.add(候选者[i]);

zvvq

backTracking(combs, 目标, 候选者, i+1, sum, false); zvvq好,好zvvq

sum-=侯选人[i]; zvvq.cn

木梳.删掉(木梳.size()-1);

内容来自samhan

地平线=真; 内容来自samhan666

} 本文来自zvvq

} 本文来自zvvq

131. 回文分区给出一个字符串 s,对 s开展分区促使每个 内容来自zvvq,别采集哟

子串 本文来自zvvq

分区的是 内容来自samhan666

回文

内容来自samhan666

。回到 s.所有可能的回文区划实例1:

copyright zvvq

键入:s="aab"

内容来自samhan666

导出:[["a","a","b"],["aa","b"]]

内容来自zvvq

实例2:键入:s = "a" zvvq好,好zvvq

导出:[["a"]]限定: 内容来自zvvq

1 s仅包含小写英语字母。

内容来自zvvq

初始页面 内容来自samhan

List>list=newArrayList(); 内容来自samhan

公共列表>分区(字符串s){ zvvq好,好zvvq

List 梳=newArrayList(); 内容来自zvvq,别采集哟

backTracking(combs, newStringBuilder(s), 0);

内容来自zvvq,别采集哟

返回列表;

本文来自zvvq

}

zvvq.cn

公共失效 backTracking(List 木梳,StringBuilder str,int start){ 内容来自zvvq

if(start== str.length()){

zvvq.cn

list.add(newArrayList(combs)); zvvq好,好zvvq

回到; 内容来自samhan

} copyright zvvq

for(inti=1;i+start 本文来自zvvq

以上就是LeetCode DayBackTracking 第 2 部分的详细内容,大量请关注其他类似文章! 本文来自zvvq