遇到* 和( 正常入符号栈,遇到+ 和- ,计算前面所有的表达式值,遇到) 计算符号栈到( 前的表达式值
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
int solve(string s) {
// write code here
stack<int> num,op;
auto calpre = [=,&num,&op](bool f){
while(!op.empty() && op.top() != '('){
int pre = num.top();num.pop();
int tai = num.top();num.pop();
if(op.top() == '+') num.push(pre+tai);
else if(op.top() == '-')num.push(tai-pre);
else num.push(pre*tai);
op.pop();
}
if(f && !op.empty() && op.top() == '(') op.pop();
};
for(int i=0;i<s.size();){
if( isdigit(s[i]) ){
int n = atoi(s.c_str()+i);
num.push(n);
while(isdigit(s[i])) i++;
}else if(s[i] == '*' || s[i] == '('){
op.push(s[i++]);
}else if(s[i] == '+' || s[i] == '-'){
calpre(false);op.push(s[i++]);
}else{
calpre(true);i++;
}
}
calpre(false);
return num.top();
}
};