链接
https://leetcode-cn.com/problems/basic-calculator/
耗时
解题:19 min
题解:12 min
题意
实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。
思路
只有 加减法 和 括号,将括号完全打开,计算结果不会变,所以只需要处理好每个数前实际的符号,并按实际的符号将这些数加进结果即可。
因为包含 括号,用栈记录括号前的符号,遇到 ‘+’ 那么当前符号就是栈顶符号,遇到 ‘-’ 那么当前符号是栈顶符号的相反符号,遇到 ‘(’ 将括号前的实际符号入栈,遇到 ‘)’ 将栈顶符号出栈,遇到数字则将数字读取出来乘上当前符号并加进结果。
时间复杂度: O ( n ) O(n) O(n)
AC代码
class Solution {
public:
int calculate(string s) {
int n = s.size();
stack<int> st;
st.push(1);
int sign = 1;
int ans = 0;
for(int i = 0; i < n; ++i) {
if(s[i] == ' ') continue;
else if(s[i] == '+') {
sign = st.top();
}
else if(s[i] == '-') {
sign = -st.top();
}
else if(s[i] == '(') {
st.push(sign);
}
else if(s[i] == ')') {
st.pop();
}
else {
int num = 0;
while(s[i] >= '0' && s[i] <= '9') {
num = num*10 + (s[i]-'0');
i++;
}
i--;
ans += sign*num;
}
}
return ans;
}
};