前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode306累加数(递归解决)

Leetcode306累加数(递归解决)

原创
作者头像
伯约同学
发布2022-04-10 18:59:00
1790
发布2022-04-10 18:59:00
举报
代码语言:javascript
复制
```javascript
/**
 * @param {string} num
 * @return {boolean}
 */
var isAdditiveNumber = function(num) {
    let flag = false
var addStrings = function(num1, num2) {
    let arr1 = num1.split('').map(item=>{return Number(item)})
    let arr2 = num2.split('').map(item=>{return Number(item)})
    let jin = 0
    let str = ''
    while(arr1.length || arr2.length || jin){
        let number1 = arr1.pop() || 0
        let number2 = arr2.pop() || 0
        str =(jin + number2 + number1)%10 + st
        jin = Math.floor((jin + number2 + number1)/10) 
    }
    return st

};
    function dfs(pre,curr,rest){
        if(pre.length >1 && pre[0] === "0"){
            return
        }
        if(curr.length >1 && curr[0] === "0"){
            return
        }
        if(rest === ''){
            flag = true
            return
        }
        let total = addStrings(pre,curr)
        if(rest.length < total.length){
            return
        }
        let next = rest.substring(0,total.length)
        if(next === total){
            dfs(curr,next,rest.substring(total.length))
        }
        
    }

    // i是第一个字符串尾部对应的索引
    // j是第二个字符串尾部对应的索引
    for(let i=0;i<num.length;i++){
        // TODO
        // 进一步,限制
        // 进一步
        // 搞定这个i j的关系
        for(let j=i+1;j-i<=num.length -j;j++){
            if(num.substring(j+1)){
            dfs(num.substring(0,i+1),num.substring(i+1,j+1),num.substring(1+j))
            }
        }
    }
    return flag

};
```

这道题讲道理写了这么多行代码,用了两个中难度的解决办法,也算是个复杂题了吧?

解题思路:

i和j分别表示第一个数的截至位置和第二个数的截至位置。

这样就算是确定了开头的两个数字,此外还需要一个函数用来计算两个字符串的和。剩下的就是修一下边边角角,对于一些特殊条件的过滤了。上面的写法还有一些优化空间,不过今天没空搞了,有不理解的可以留言交流下。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档