题目
牛客 BM49 表达式求值
代码(8.22 首刷看解析)
class Solution {
public:
int solve(string s) {
stack<int> sk;
stack<char> op;
int i = 0;
while(i < s.size()) {
if(isdigit(s[i])) {
int num = 0;
while(isdigit(s[i])) {
num = num*10 + s[i]-'0';
i++;
}
sk.push(num);
} else if(s[i] == '(') {
op.push(s[i]);
i++;
} else if(s[i] == ')') {
while(op.top() != '(') {
int num1 = sk.top();
sk.pop();
int num2 = sk.top();
sk.pop();
char cal = op.top();
op.pop();
sk.push(calculate(num1, num2, cal));
}
op.pop();
i++;
} else if(s[i] == '*') {
op.push(s[i]);
i++;
} else {
while(sk.size() >= 2) {
if(op.top() == '(')
break;
int num1 = sk.top();
sk.pop();
int num2 = sk.top();
sk.pop();
char cal = op.top();
op.pop();
sk.push(calculate(num1, num2, cal));
}
op.push(s[i]);
i++;
}
}
while(!op.empty()) {
int num1 = sk.top();
sk.pop();
int num2 = sk.top();
sk.pop();
char cal = op.top();
op.pop();
sk.push(calculate(num1, num2, cal));
}
return sk.top();
}
int calculate(int num1, int num2, char cal) {
if(cal == '+')
return num1+num2;
if(cal == '-')
return num2 - num1;
return num1*num2;
}
};