给表达式添加运算符
给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回 所有 能够得到 target 的表达式。
注意,返回表达式中的操作数 不应该 包含前导零。
输入: num = “123”, target = 6
输出: [“1+2+3”, “123”]
解释: “123” 和 “1+2+3” 的值都是 6。
输入: num = “232”, target = 8
输出: [“23+2”, “2+32”]
解释: “23+2” 和 “2+32” 的值都是 8。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| var addOperators = function(num, target) { const arr = []; const dfs = (str, idx, nextNum, res, nextRes) => { if (idx !== num.length) { let newRes = res; let newNextRes = nextRes; const currentNum = Number(num[idx]); newNextRes = nextRes * currentNum; newRes = res - nextRes + newNextRes; dfs(str + "*" + num[idx], idx + 1, currentNum, newRes, newNextRes); newNextRes = currentNum; newRes = res + newNextRes; dfs(str + "+" + num[idx], idx + 1, currentNum, newRes, newNextRes); newNextRes = -currentNum; newRes = res + newNextRes; dfs(str + "-" + num[idx], idx + 1, currentNum, newRes, newNextRes); const newNextNum = nextNum * 10 + currentNum; newNextRes = (nextRes / nextNum) * newNextNum; newRes = res - nextRes + newNextRes; if (newNextNum !== 0) { dfs(str + num[idx], idx + 1, newNextNum, newRes, newNextRes); } } else { if (res === target) arr.push(str); } }; dfs(num[0], 1, Number(num[0]), Number(num[0]), Number(num[0])); return arr; };
|