class Solution { public: vector<string> res; vector<string> addOperators(string num, int target) { if (num.length() == 0) return res; helper(num, target, "", 0, 0, 0); return res; } void helper(const string& num, int target, string path, int pos, long val, long cur) { if (pos == num.length()) { if (target == val) res.push_back(path); return; } for (int len = 1; pos + len <= num.length(); len++) { if (len > 1 && num[pos] == '0') break; string cur_str = num.substr(pos, len); long cur_num = stol(cur_str); if (pos == 0) helper(num, target, cur_str, pos + len, cur_num, cur_num); else { helper(num, target, path + "+" + cur_str, pos + len, val + cur_num, cur_num); helper(num, target, path + "-" + cur_str, pos + len, val - cur_num, -cur_num); helper(num, target, path + "*" + cur_str, pos + len, val - cur + cur * cur_num, cur * cur_num); } } } };