## Monday, August 7, 2017

### [Leetcode] Basic Calculator, Solution

Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open `(` and closing parentheses `)`, the plus `+` or minus sign `-`non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
```"1 + 1" = 2
" 2-1 + 2 " = 3
"(1+(4+5+2)-3)+(6+8)" = 23
```
Note: Do not use the `eval` built-in library function.

[Thoughts]

[Code]
``````1:    int calculate(string s) {
2:      stack<int> nums, ops;
3:      int num = 0;
4:      int total = 0;
5:      char pre_op = '+';
6:      for(char c : s) {
7:        if(isdigit(c)) {
8:          num = num* 10 + c-'0';
9:        } else {
10:          total += (pre_op == '+' ? num:-num);
11:          num = 0;
12:          if(c == '(') {
13:            nums.push(total);
14:            ops.push(pre_op);
15:            total = 0;
16:            pre_op = '+';
17:          } else if(c == ')') {
18:            char op = ops.top();
19:            int temp = nums.top();
20:            total = (op == '+' ? total:-total) + temp;
21:            ops.pop();
22:            nums.pop();
23:          } else if(c == '+' || c == '-') {
24:            pre_op = c;
25:          }
26:        }
27:      }
28:      total += (pre_op == '+' ? num:-num);