1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class Solution { public: vector<string> addOperators(string num, int target) { n = size(num); string s(n << 1, 0); dfs(0, 0, s, 0, num, 0, target); return res; }
private: void dfs(long sum, long last_num, string &s, int len, const string &num, int b, const int target) { if (sum == target && b == n) { res.push_back(s.substr(0, len)); } int l = len; if (b != 0) { ++len; } long curr_num = 0; for (int i = b; i < n; ++i) { s[len++] = num[i]; curr_num = curr_num * 10 + num[i] - '0'; if (b == 0) { dfs(curr_num, curr_num, s, len, num, i + 1, target); } else { s[l] = '+'; dfs(sum + curr_num, curr_num, s, len, num, i + 1, target); s[l] = '-'; dfs(sum - curr_num, -curr_num, s, len, num, i + 1, target); s[l] = '*'; dfs(sum - last_num + last_num * curr_num, last_num * curr_num, s, len, num, i + 1, target); } if (num[b] == '0') break; } }
int n; vector<string> res; };
|