224. Basic Calculator
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.
int calculate(string s) { // time: O(n); space: O(n)
if (s.empty()) return 0;
int n = s.length(), num = 0, res = 0, sign = 1;
stack<int> st;
for (int i = 0; i < n; ++i) {
char c = s[i];
if (c >= '0' && c <= '9') num = num * 10 + (c - '0');
else if (c == '+') {
res += sign * num;
num = 0;
sign = 1;
} else if (c == '-') {
res += sign * num;
num = 0;
sign = -1;
} else if (c == '(') {
st.push(res);
st.push(sign);
res = 0;
sign = 1;
} else if (c == ')') {
res += sign * num;
num = 0;
res *= st.top(); st.pop();
res += st.top(); st.pop();
}
}
if (num) res += sign * num;
return res;
}
Last updated
Was this helpful?