1+ class Solution {
2+ public:
3+ vector<string> addOperators (string num, int target) {
4+ vector<string> results;
5+ DFS (num, target, 0 , " " , 0 , " " , 0 , results);
6+ return results;
7+ }
8+
9+ void DFS (string& num, int target, int idx, string solution, long long current_val, string pre_op, long long pre_val, vector<string>& results) {
10+ if (current_val == target && idx == num.size ()) {
11+ results.push_back (solution);
12+ return ;
13+ }
14+ if (idx == num.size ()) return ;
15+ string n;
16+ long long v = 0 ;
17+ for (int i = idx; i < num.size (); ++i) {
18+ if (n ==" 0" ) {
19+ return ;
20+ }
21+ n += num[i];
22+ v = 10 *v + num[i] - ' 0' ;
23+ if (solution.size () == 0 ) {
24+ DFS (num, target, i+1 , n, v, " " , 0 , results);
25+ }else {
26+ DFS (num, target, i+1 , solution + " +" + n, current_val + v, " +" , v, results);
27+ DFS (num, target, i+1 , solution + " -" + n, current_val - v, " -" , v, results);
28+ if (pre_op == " +" ) {
29+ DFS (num, target, i+1 , solution + " *" + n, current_val-pre_val+pre_val*v, pre_op, pre_val*v, results);
30+ }else if (pre_op == " -" ) {
31+ DFS (num, target, i+1 , solution + " *" + n, current_val+pre_val-pre_val*v, pre_op, pre_val*v, results);
32+ }else {
33+ DFS (num, target, i+1 , solution + " *" + n, current_val*v, " *" , v, results);
34+ }
35+ }
36+ }
37+ return ;
38+ }
39+ };
0 commit comments