39. 组合总和
文章讲解:代码随想录
class Solution {
List<List<Integer>> lists = new ArrayList<>();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<Integer> list = new ArrayList<>();
Arrays.sort(candidates);
backTracking(list,candidates,target,0,0);
return lists;
}
public void backTracking(List<Integer> list,int[] candidates,int target,int sum,int start){
if(sum == target){
lists.add(new ArrayList<>(list));
return;
}
for(int i = start;i<candidates.length;i++){
if(sum > target){
break;
}
list.add(candidates[i]);
sum+=candidates[i];
backTracking(list,candidates,target,sum,i);
sum-=candidates[i];
list.remove(list.size()-1);
}
}
}
40.组合总和II
文章讲解:代码随想录
class Solution {
List<List<Integer>> lists = new ArrayList<>();
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
List<Integer> list =new ArrayList<>();
Arrays.sort(candidates);
backTracking(candidates,0,target,list,0);
return lists;
}
public void backTracking(int[] candidates,int sum,int target,List<Integer> list,int start){
if(sum == target){
lists.add(new ArrayList<>(list));
return;
}
for(int i = start;i<candidates.length ;i++){
if(sum>target)
break;
if(i!=0 && i!=start && candidates[i] == candidates[i-1]){
continue;
}
list.add(candidates[i]);
sum += candidates[i];
backTracking(candidates,sum,target,list,i+1);
sum-=candidates[i];
list.remove(list.size()-1);
}
}
}
131.分割回文串
文章讲解:代码随想录
class Solution {
List<List<String>> lists = new ArrayList<>();
public List<List<String>> partition(String s) {
List<String> list = new ArrayList<>();
backTracking(list,s,0);
return lists;
}
public void backTracking(List<String> list,String s,int start){
if(start == s.length()){
lists.add(new ArrayList<>(list));
return;
}
for(int i = start;i<=s.length();i++){
if(start == i || !panduan(s.substring(start,i))){
continue;
}
list.add(s.substring(start,i));
backTracking(list,s,i);
list.remove(list.size()-1);
}
}
public boolean panduan(String s){
int left = 0;
int right = s.length()-1;
while(left<=right){
if(s.charAt(left) != s.charAt(right))
return false;
else{
left++;
right--;
}
}
return true;
}
}