public class Solution {
public List<String> addOperators(String num, int target) {
List<String> res = new LinkedList<>();
helper(res, num, target, "", 0, 0);
return res;
}
private void helper(List<String> res, String num, int target, String expression, long curRes, long prevRes) {
if (num.length() == 0) {
if (curRes == target) {
res.add(expression);
}
return;
}
for (int i = 1; i <= num.length(); i++) {
String curStr = num.substring(0, i);
if (curStr.length() > 1 && curStr.charAt(0) == '0') {
return;
}
long curNum = Long.valueOf(curStr);
String nextNum = num.substring(i);
if (expression.length() > 0) {
helper(res, nextNum, target, expression + "*" + curStr, curRes - prevRes + prevRes*curNum, prevRes*curNum);
helper(res, nextNum, target, expression + "+" + curStr, curRes + curNum, curNum);
helper(res, nextNum, target, expression + "-" + curStr, curRes - curNum, -curNum);
} else {
helper(res, nextNum, target, curStr, curNum, curNum);
}
}
}
}
Expression Add Operators
最新推荐文章于 2020-11-05 00:11:14 发布