class Solution {
public:
vector<string> addOperators(string &num, int target) {
vector<string> res;
dfs(num, target, res, "", 0, 0, 0);
return res;
}
void dfs(string &num, int target, vector<string> &res, string resElem, int start, int sum, int diff){
if(start == num.size()){
if(sum == target){
res.push_back(resElem);
}
return;
}
for(int i = start; i < num.size(); i++){
if(num[start] == '0'){
if(resElem.size() == 0){
dfs(num, target, res, resElem + "0", i + 1, 0, 0);
}
else{
dfs(num, target, res, resElem + "+0", i + 1, sum, 0);
dfs(num, target, res, resElem + "-0", i + 1, sum, 0);
dfs(num, target, res, resElem + "*0", i + 1, sum - diff + diff * 0, 0);
}
break;
}
else{
string sub = num.substr(start, i - start + 1);
long long n = stoll(sub);
if(resElem.size() == 0){
dfs(num, target, res, resElem + sub, i + 1, n, n);
}
else{
dfs(num, target, res, resElem + "+" + sub, i + 1, sum + n, n);
dfs(num, target, res, resElem + "-" + sub, i + 1, sum - n, -n);
dfs(num, target, res, resElem + "*" + sub, i + 1, sum - diff + n * diff, n * diff);
}
}
}
return;
}
};
Comments
Post a Comment