代码随想录算法训练营第二十三天| 39. 组合总和 、 40.组合总和II 、131.分割回文串

25 阅读1分钟

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;
};