# 给表达式添加运算符

给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+- 或 * ,返回所有能够得到目标值的表达式。

 

示例 1:

输入: num = "123", target = 6
输出: ["1+2+3", "1*2*3"] 

示例 2:

输入: num = "232", target = 8
输出: ["2*3+2", "2+3*2"]

示例 3:

输入: num = "105", target = 5
输出: ["1*0+5","10-5"]

示例 4:

输入: num = "00", target = 0
输出: ["0+0", "0-0", "0*0"]

示例 5:

输入: num = "3456237490", target = 9191
输出: []

 

提示:

## template ```java class Solution { int n; String num; List ans; int target; public List addOperators(String num, int target) { this.n = num.length(); this.num = num; this.target = target; this.ans = new ArrayList(); StringBuffer expr = new StringBuffer(); dfs(expr, 0, 0, 0); return ans; } public void dfs(StringBuffer sba, long sum, long prepareMultiply, int index) { StringBuffer sb = new StringBuffer(sba); if (index == n) { if (sum == target) { ans.add(sb.toString()); } return; } int sign = sb.length(); if (index > 0) { sb.append("0"); } long val = 0; for (int i = index; i < n && (i == index || num.charAt(index) != '0'); i++) { val = val * 10 + (num.charAt(i) - '0'); sb.append(num.charAt(i)); if (index == 0) { dfs(sb, val, val, i + 1); continue; } sb.setCharAt(sign, '+'); dfs(sb, sum + val, val, i + 1); sb.setCharAt(sign, '-'); dfs(sb, sum - val, -val, i + 1); sb.setCharAt(sign, '*'); dfs(sb, sum - prepareMultiply + prepareMultiply * val, prepareMultiply * val, i + 1); } } } ``` ## 答案 ```java ``` ## 选项 ### A ```java ``` ### B ```java ``` ### C ```java ```