Basic Calculator LeetCode solution in C++

1
class Solution {
2
public:
3
int calculate(string s) {
4
stack<pair<int, int>> st; // pair(prev_calc_value , sign before next bracket () )
5

6
long long int sum = 0;
7
int sign = +1;
8

9
for (int i = 0; i < s.size(); ++i) {
10
char ch = s[i];
11

12
if (isdigit(ch)) {
13
long long int num = 0;
14
while (i < s.size() and isdigit(s[i])) {
15
num = (num * 10) + s[i] - '0';
16
i++;
17
}
18
i--; // as for loop also increase i , so if we don't decrease i here a
19
// sign will be skipped
20
sum += (num * sign);
21
sign = +1; // reseting sign
22
} else if (ch == '(') {
23
// Saving current state of (sum , sign) in stack
24
st.push(make_pair(sum, sign));
25

26
// Reseting sum and sign for inner bracket calculation
27
sum = 0;
28
sign = +1;
29
} else if (ch == ')') {
30
sum = st.top().first + (st.top().second * sum);
31
st.pop();
32
} else if (ch == '-') {
33
// toggle sign
34
sign = (-1 * sign);
35
}
36
}
37
return sum;
38
}
39
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0