【LeetCode】227. 基本计算器Ⅱ

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stack>
using namespace std;

class Solution {
public:
int calculate(string s) {
int ans = 0;
stack<int> st;
stack<char> opst;
int num = 0;
//遍历字符串,将数字和符号入栈,当遇到符号且符号栈顶为乘除符号时,弹出元素将计算后的重新入栈
for (int i = 0; i < s.length(); ++i) {
char c = s[i];
if (c == ' ')
continue;
if (isdigit(c)) { // 使用isdigit检查是否为数字
num = num * 10 + (c - '0');
} else {
if (!opst.empty() && (opst.top() == '*' || opst.top() == '/')) {
num = (opst.top() == '*') ? st.top() * num : st.top() / num;
opst.pop();
st.pop();
}
st.push(num);
num = 0;
opst.push(c);
}
}
// 处理遍历完字符串后,栈顶符号是乘除的情况
if (!opst.empty() && (opst.top() == '*' || opst.top() == '/')) {
num = (opst.top() == '*') ? st.top() * num : st.top() / num;
opst.pop();
st.pop();
}
st.push(num);
num = 0;
//此时符号栈中应只有加减号
while (!opst.empty()) {
char op = opst.top();
opst.pop();
int prev = st.top();
st.pop();
ans = (op == '+') ? ans + prev : ans - prev;
}
ans += st.top();
return ans;
}
};

  • Copyrights © 2019-2024 Hxy
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信