【LeetCode】224. 基本计算器

括号展开 + 栈

核心是利用栈击穿括号,将符号转变为没有括号的样子。

栈顶保留括号前符号,加号括号内符号不变,减号括号内符号反转。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
int calculate(string s) {
stack<char> st; // 存储正负号
int ans = 0, num = 0, op = 1;
st.push(op);

for (char c : s) {
if (c == ' ') continue;
else if (c >= '0') num = num * 10 - '0' + c;
else {
ans += op * num;
num = 0;

if (c == '+') op = st.top();
else if (c == '-') op = -st.top();
else if (c == '(') st.push(op); // 将括号前符号放入栈顶
else st.pop();
}
}

return ans + op * num;
}
};
  • Copyrights © 2019-2024 Hxy
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信