Additive Number
MediumStringBacktracking
Solution
export function isAdditiveNumber(num: string): boolean {
function sum(a: string, b: string): string {
return String(BigInt(a) + BigInt(b));
}
function dfs(currentIndex: number, num: string, results: string[]) {
if (currentIndex === num.length && 3 <= results.length) {
return true;
}
for (let i = currentIndex; i <= num.length; i++) {
if (currentIndex !== i && num[currentIndex] === '0') {
return false;
}
const result = num.substring(currentIndex, i + 1);
if (
results.length <= 1 ||
result === sum(results[results.length - 2], results[results.length - 1])
) {
results.push(result);
if (dfs(i + 1, num, results)) {
return true;
}
results.pop();
}
}
return false;
}
return dfs(0, num, []);
}