2.5lc93. 复原 IP 地址

多个if嵌套比&&好想一点 

递归的出口最后回到最外层调用,而回溯的出口在决策树的叶子节点

//决策树根据【加数字】【加点】展开
var restoreIpAddresses = function(s) {
    let res=[]
    function tra(cur, n, tmp, arch){ //(0~length-1,0~3,'',['',''])
        if(cur===s.length&&n===4) res.push(arch)
        if(cur<=s.length&&n<4){
            if(tmp===''&&s[cur]==='0')tra(cur+1,n+1,'',[...arch,'0'])
            else if(tmp.length<3){
                if(Number(tmp+s[cur])>255)tra(cur,n+1,'',[...arch,tmp])
                else{
                    if(tmp.length>0) tra(cur,n+1,'',[...arch,tmp])
                    tra(cur+1,n,tmp+s[cur],[...arch])
                }
            }else tra(cur,n+1,'',[...arch,tmp])
        }
    }
    tra(0,0,'',[])
    
    res=res.map((l)=>{
        let tmp=''
        l.forEach((i)=>{tmp+=i+'.'})
        return tmp.slice(0,-1)
    })
    return res
};

//决策树根据【加1/2/3个数字】展开
var restoreIpAddresses = function(s) {
    let cur=0,n=1,tmp=[],res=[]//0~length-1,1~4,['','']
    function tra(cur,n,tmp){
        if(n<=4){
            if(cur<s.length){
                tra(cur+1,n+1,[...tmp,s[cur]])
                if(s[cur]!=='0'){
                    if(cur<s.length-1)tra(cur+2,n+1,[...tmp,s.slice(cur,cur+2)])
                    if(cur<s.length-2){
                        if(Number(s.slice(cur,cur+3))<=255)
                        tra(cur+3,n+1,[...tmp,s.slice(cur,cur+3)])
                    }
                }
            }
        }else{
            if(cur===s.length)res.push(tmp)
        }
    }
    tra(cur,n,tmp)
    return res.map((l)=>{
        let str=''
        l.forEach((i)=>{str+=i+'.'})
        return str.slice(0,-1)
    })
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值