思路:只有加减法,可以把括号全都展开来写,例如 2 - (1 - 3)展开成 2 - 1 + 3。
class Solution {
public:
int calculate(string s) {
stack<int> sign; //栈顶记录当前符号
sign.push(1); //默认为正
int res = 0, num = 0, op = 1;
for (char ch : s)
{ //空格可以不管,直接忽略
if (ch >= '0' && ch <= '9') //取出完整数值
{
num = num * 10 + (ch - '0');
continue;
}
res += op * num; //计算一个运算符
num = 0; //数值清空
if (ch == '+') op = sign.top();
else if (ch == '-') op = -sign.top();
else if (ch == '(') sign.push(op); //进入左括号,把左括号之前的符号置于栈顶
else if (ch == ')') sign.pop(); //退出括号,弹出栈顶符号
}
res += op * num; //计算最后一个数
return res;
}
};