给定一个仅包含数字的字符串 num 和一个目标值 target,在 num 的数字之间添加二元运算符 "+" , "-" 或 "*" ,返回所有能够得到目标值的表达式。
数据范围:字符串长度满足 , nums 中仅包含数字,
import java.util.*; public class Solution { public String[] addOpt(String num, int target) { List<String> result = new ArrayList<>(); backtrack(result, num, target, "", 0, 0, 0); return result.toArray(new String[0]); } public void backtrack(List<String> result, String num, int target, String expr, int index, long eval, long multed) { if (index == num.length()) { if (eval == target) { result.add(expr); } return; } for (int i = index; i < num.length(); i++) { if (i != index && num.charAt(index) == '0') { break; } long curr = Long.parseLong(num.substring(index, i + 1)); if (index == 0) { backtrack(result, num, target, expr + curr, i + 1, curr, curr); } else { backtrack(result, num, target, expr + "+" + curr, i + 1, eval + curr, curr); backtrack(result, num, target, expr + "-" + curr, i + 1, eval - curr, -curr); backtrack(result, num, target, expr + "*" + curr, i + 1, eval - multed + multed * curr, multed * curr); } } } }