0282:给表达式添加运算符(★★)
目录
题目
给定一个仅包含数字 0-9
的字符串 num
和一个目标值整数 target
,在 num
的数字之间添加 二元 运算符(不是一元)+
、-
或 *
,返回 所有 能够得到 target
的表达式。
注意,返回表达式中的操作数 不应该 包含前导零。
示例 1:
输入: num =
"123", target = 6
输出: ["1+2+3", "1*2*3"]
解释: “1*2*3” 和 “1+2+3” 的值都是6。
示例 2:
输入: num =
"232", target = 8
输出: ["2*3+2", "2+3*2"]
解释: “2*3+2” 和 “2+3*2” 的值都是8。
示例 3:
输入: num =
"3456237490", target = 9191
输出: []
解释: 表达式 “3456237490” 无法得到 9191 。
提示:
1 <= num.length <= 10
num
仅含数字-231 <= target <= 231 - 1
相似问题:
分析
#1
- 回溯时,要递推 exp+op+num[i:j] 的值
- 考虑将 exp 最后一个连乘式(包括负号)拆出来,变成 exp_ + mul
- 维护 exp_ 和 mul 的值,即可递推
|
|
510 ms
2
- 还可以将连乘式 mul 拆成 a * b,a 包括负号,b 是最后一个乘数
- 即可按 num 的每一位递推
解答
|
|
410 ms