39. 组合总和
解题思路
代码实现
var combinationSum = function(candidates, target) {
var result = [];
var path =[];
var backtracking = function(candidates, target,sum,sIndex){
if(sum > target) return;
if(sum == target){
result.push([...path]);
return;
}
for(let i= sIndex;i<candidates.length;i++){
path.push(candidates[i]);
sum += candidates[i];
backtracking(candidates, target,sum,i);
path.pop();
sum -=candidates[i];
}
}
backtracking(candidates, target, 0, 0);
return result;
};
40.组合总和II
解题思路
代码实现
var combinationSum2 = function(candidates, target) {
var result = [];
var path = [];
candidates.sort((a,b)=>{
return a-b
})
var backtracking = function(candidates, target,sum,sIndex){
if(sum > target) return;
if(sum == target){
result.push([...path]);
return;
}
for(let i =sIndex; i<candidates.length; i++){
path.push(candidates[i]);
sum += candidates[i];
backtracking(candidates, target,sum,i + 1);
while(candidates[i] === candidates[i + 1]){
++i;
}
path.pop();
sum -= candidates[i];
}
}
backtracking(candidates, target,0,0);
return result;
};
131.分割回文串
解题思路
代码实现
var palidrome = function(s){
if(s.length === 0){
return false;
}
for(let i =0,j=s.length-1;i<=j;i++,j--){
if(s[i] !== s[j]){
return false;
}
}
return true;
}
var partition = function(s) {
var result =[];
var path =[];
var backtracking = function(s,sIndex){
if(sIndex >= s.length){
result.push([...path]);
return;
}
for(let i = sIndex; i<=s.length;i++){
console.log(sIndex,i);
if(palidrome(s.substring(sIndex,i))){
console.log(s.substring(sIndex,i));
path.push(s.substring(sIndex,i));
backtracking(s,i);
path.pop();
}
}
}
backtracking(s,0);
return result;
};