栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

306. 累加数 回溯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号