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 .
Example 1:
Input: "1 + 1" Output: 2
Example 2:
Input: " 2-1 + 2 " Output: 3
Example 3:
Input: "(1+(4+5+2)-3)+(6+8)" Output: 23
Note:
- You may assume that the given expression is always valid.
- Do not use the
eval
built-in library function.
class Solution {
public:
int calculate(string s) {
if (s.empty())
return 0;
long res = 0, num = 0;
int sign = 1;
stack<long> st;
for (int i = 0; i < s.size(); i ++) {
char ch = s[i];
if (ch >= '0')
num = num*10 + ch - '0';
else if (ch == '+' || ch == '-') {
res += sign*num;
num = 0;
sign = (ch == '+') ? 1 : -1;
}
else if (ch == '(') {
st.push(res);
st.push(sign);
res = 0;
sign = 1;
}
else if (ch == ')') {
res += sign*num;
num = 0;
res *= st.top();
st.pop();
res += st.top();
st.pop();
}
}
res += sign * num;
return res;
}
};