
一个有效的 累加序列 必须 至少 包含 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
};
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)