跳到主要内容

282.给表达式添加运算符

链接:282.给表达式添加运算符
难度:Hard
标签:数学、字符串、回溯
简介:给定一个仅包含数字  0-9  的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、-  或  * ,返回所有能够得到目标值的表达式。

题解 1 - typescript

  • 编辑时间:2021-10-16
  • 执行用时:7944ms
  • 内存消耗:103.7MB
  • 编程语言:typescript
  • 解法介绍:dfs。
function addOperators(num: string, target: number): string[] {
const n = num.length;
if (n === 1) {
return +num === target ? [num] : [];
}
const ops = ['+', '-', '*', ''];
const ans = new Set<string>();
dfs();
return Array.from(ans);
function dfs(idx = 0, template = '') {
if (idx === n) {
if (eval(template) === target) ans.add(template);
return;
}
const current = num[idx];
template += current;
if (idx === n - 1) {
dfs(idx + 1, template);
return;
}
for (const op of ops) {
if (num[idx] === '0' && op === '') continue;
dfs(idx + 1, template + op);
}
while (idx < n - 1 && current !== '0' && num[idx + 1] === '0') {
template += '0';
dfs(idx + 2, template);
idx += 1;
}
}
}