加号是一个数字字符串,其数字可以形成加号序列。
有效的加法序列应至少包含三个数字。除前两个数字外,序列中的每个后续数字都必须是前两个数字的和。给定仅包含数字“ 0”-“ 9”的字符串,编写一个函数以确定它是否为加数。
注意-加法序列中的数字不能有前导零,因此序列1、2、03或1、02、3无效。
例如-
字符串“ 199100199”是加法数字,因为,加法顺序为-1、99、100、199-
1 + 99 = 100, 99 + 100 = 199
为此的代码将是-
const str = "199100199";
const isAdditiveNumber = (numStr) => {
if(numStr.length < 3) return false;
let str = "";
let seen = true;
for(let i = numStr.length − 1; i > 1; i−−){
str = `${numStr[i]}${str}`;
if(numStr[i] === "0") continue;
let s = str;
let s2 = numStr[i − 1]
for(let j = i − 2; j >= 0; j−−){
if(`${s2}`.startsWith("0") && s2.length > 1){
s2 = `${numStr[j]}${s2}` seen = false;
} else if(parseInt(s) >= parseInt(s2)){
let diff = s − s2;
if(numStr.slice(0, j + 1).endsWith(diff)){
s = s2;
s2 = diff;
let ind = Math.floor(Math.log10(diff));
ind = ind < 0 ? 0 : ind
j −= ind;
seen = true;
}else {
s2 = `${numStr[j]}${s2}`
seen = false;
}
}else{
seen = false;
break;
}
}
if(seen) return seen;
};
return seen;
};
console.log(isAdditiveNumber(str));输出结果
控制台中的输出将是-
true