/** * @param {string} num * @return {boolean} */var isAdditiveNumber = function(num) {    let flag = falsevar 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 + str        jin = Math.floor((jin + number2 + number1)/10)     }    return str};    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别离示意第一个数的截至地位和第二个数的截至地位。
这样就算是确定了结尾的两个数字,此外还须要一个函数用来计算两个字符串的和。剩下的就是修一下边边角角,对于一些非凡条件的过滤了。下面的写法还有一些优化空间,不过明天没空搞了,有不了解的能够留言交换下。