306. 累加数 回溯

306. 累加数 回溯,第1张

306. 累加数 回溯

 

累加数 是一个字符串,组成它的数字可以形成累加序列

一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。

给你一个只包含数字 '0'-'9' 的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。

说明:累加序列里的数,除数字 0 之外,不会 以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。

示例 1:

输入:"112358"
输出:true 
解释:累加序列为: 1, 1, 2, 3, 5, 8 。1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8
示例 2:

输入:"199100199"
输出:true 
解释:累加序列为: 1, 99, 100, 199。1 + 99 = 100, 99 + 100 = 199

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/additive-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

var isAdditiveNumber = function(num) {
    let copynunm = num
     // 回溯
    let count = 0
    let backtrack = function(start, path) {
        if (path.length >= 3) {
            let len = path.length
            if (+path[len-1] != +path[len-2]*1 + path[len - 3]*1) {
                return
            }
        }
        if (path.length < 3 && num.length === start) {
            return
        }
        if (path.length >= 3 && num.length === start) {
                        console.log(888)
            count++
        }
        for(let i = start;  i < copynunm.length; i++) {
            let selectstr= copynunm.substr(start, i - start + 1);
            if (!selectstr) {
                continue
            }
            if (+selectstr !== 0 && selectstr.startsWith('0')) {
                continue
            }
            path.push(selectstr)
            backtrack(i+1, path);
            path.pop();
        }
    } 

    backtrack(0, [], num);
    return count >= 1

};

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5703275.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存