leetcode--回溯---131分割回文数

分割回文数

leetcode

题解如下:

// 判断回文的函数
    // 传入开始回溯的归属于s的index和l的尾节点r,(也可以说是用滑动窗口来判断是否为回文数)
    // 目的就是为了判断是否会回文数
    const isPaire = (s,l,r)=>{
        for(let i=l,j=r;i<j;i++,j--){
            if(s[i]!=s[j]) return false
        }
        return true
    }
var partition = function(s) {
​
    let res = [],path=[]
    let length = s.length
    backtracking(s,length,0)
    return res
​
    function backtracking(s,length,startIndex){
        // 如果回溯的index超过了s的长度,就说明已经全部遍历完了,就可以剪枝了
        // 不合适的也没有放到path中,在下面回溯的单层逻辑中有提到怎么区分到底是不是回文
        if(startIndex>=length){
            res.push(Array.from(path))
            return
        }
        for(let i = startIndex;i<length;i++){
            // 判断是否为回文,是的话就执行接下来的代码,不是的话,就执行下一个i
            // 判断的是[startIndex,i]是否为回文数,是的话就放进去
            if(!isPaire(s,startIndex,i))continue
            // 传入的是分割字符串的截取片段,传入的是为回文数的字符串[startIndex,i]
            path.push(s.slice(startIndex,i+1))
            backtracking(s,length,i+1)//不重复的元素,传入i+1
            path.pop()
        }
    }
};

根据代码随想录老师的题解做出了一些属于自己的理解分析

具体链接:https://leetcode.cn/problems/palindrome-partitioning/solutions/640336/131-fen-ge-hui-wen-chuan-hui-su-sou-suo-yp2jq/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值