-
Notifications
You must be signed in to change notification settings - Fork 0
/
different-ways-to-add-parentheses.cc
56 lines (53 loc) · 1.38 KB
/
different-ways-to-add-parentheses.cc
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class Solution {
public:
//check
vector<int> diffWaysToCompute(string input) {
vector<string> parts = parse(input);
vector<int> res;
return eval(parts, 0, parts.size() - 1);
}
vector<int> eval(vector<string>& parts, int i, int j) {
vector<int> res;
if (i == j) {
res.push_back(stoi(parts[i]));
} else {
for(int k = i; k <= j; k++) {
if (parts[k] == "*" || parts[k] == "+" || parts[k] == "-") {
for(int v1: eval(parts, i, k - 1)) {
for(int v2: eval(parts, k + 1, j)) {
int v;
if (parts[k] == "*") {
res.push_back(v1 * v2);
} else if (parts[k] == "+") {
res.push_back(v1 + v2);
} else if (parts[k] == "-") {
res.push_back(v1 - v2);
}
}
}
}
}
}
return res;
}
vector<string> parse(string input) {
vector<string> parts;
for(int i = 0; i < input.size(); i++) {
int j = i;
if (input[i] >= '0' && input[i] <= '9') {
for(; j < input.size(); j++) {
if (input[j] >= '0' && input[j] <='9') {
continue;
} else {
break;
}
}
parts.push_back(input.substr(i, j - i));
i = j - 1;
} else {
parts.push_back(input.substr(i, 1));
}
}
return parts;
}
};