Leetcode306累加数(递归解决)

/** * @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 + 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

这道题讲道理写了这么多行代码,用了两个中难度的解决办法,也算是个复杂题了吧?
【Leetcode306累加数(递归解决)】解题思路:
i和j分别表示第一个数的截至位置和第二个数的截至位置。
这样就算是确定了开头的两个数字,此外还需要一个函数用来计算两个字符串的和。剩下的就是修一下边边角角,对于一些特殊条件的过滤了。上面的写法还有一些优化空间,不过今天没空搞了,有不理解的可以留言交流下。

    推荐阅读