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.
class Solution {
public:
int calculate(string s) {
stack<int> signs;
int lastSign = 1;
int curNum = 0;
int retSum = 0;
for (auto c: s)
{
if (c == '(')
{
signs.push(lastSign);//进栈主要用在有括号的情况,如果没有括号,就不需要有栈
}
else if (c == ')')
{
signs.pop();
}
else if (c >= '0' && c <= '9')
{
curNum = curNum * 10 + (c-'0');
}
else if (c == '+' || c == '-')
{
retSum = retSum + lastSign * curNum;
lastSign = (c == '+'? 1:-1);
if (signs.size() > 0)
lastSign = lastSign * signs.top();
curNum = 0;
}
}
return retSum + lastSign * curNum;
}
};