题目描述
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式可以包含左括号 (
,右括号 )
,加号 +
,减号 -
,非负整数和空格
。
示例
示例 1:
输入: "1 + 1"
输出: 2
示例 2:输入: " 2-1 + 2 "
输出: 3
示例 3:输入: "(1+(4+5+2)-3)+(6+8)"
输出: 23
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
思路
用一个栈来存储括号的符号位。
代码
class Solution {
public:
int calculate(string s) {
// 删除空格
s.erase(remove(s.begin(), s.end(), ' '), s.end());
int length = s.size();
stack<int> myStack;
myStack.push(1);
int sign = 1;
long res = 0;
for (int i = 0; i < length; i++){
if (s[i] == '+'){
sign = 1;
}
else if (s[i] == '-'){
sign = -1;
}
else if (s[i] == '('){
myStack.push(sign*myStack.top());
sign = 1;
}
else if (s[i] == ')'){
myStack.pop();
}
else{
long num = 0;
while (i < length && s[i] >= '0' && s[i] <= '9'){
num = num * 10 + s[i] - '0';
i++;
}
res += num * sign * myStack.top();
i--;
}
}
return res;
}
};