Given a string that contains only digits
0-9 and a target value, return all possibilities to add operators +, -, or * between the digits so they evaluate to the target value.
Examples:
"123", 6 -> ["1+2+3", "1*2*3"] "232", 8 -> ["2*3+2", "2+3*2"] "00", 0 -> ["0+0", "0-0", "0*0"] "3456237490", 9191 -> []
class Solution {
void helper(vector<string>& res, string &nums,
string expr, long prev,
long curVal, int target) {
if (nums.length() == 0
&& curVal == target) {
res.push_back(expr);
return;
}
for (int i = 1; i<=nums.length(); i++) {
string firstNum = nums.substr(0, i);
if(i > 1 && firstNum[0] == '0') {
return;
}
long first = stol(firstNum);
string secondNum = nums.substr(i);
if (expr.length() == 0) {
helper(res, secondNum, firstNum, first, first, target);
continue;
}
helper(res, secondNum, expr+"+"+firstNum,
first, curVal + first, target);
helper(res, secondNum, expr+"-"+firstNum,
-first, curVal - first, target);
helper(res, secondNum, expr+"*"+firstNum,
prev*first, curVal-prev+prev*first, target);
}
}
public:
vector<string> addOperators(string num, int target) {
vector<string> res;
helper(res, num, "", 0, 0, target);
return res;
}
};