class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */ int precedence(char op) { if(op=='+'||op=='-') return 1; if(op=='*'||op=='/') return 2; return 0; } int applyOp(int a,int b,char op) { switch(op) { case '+':return a+b; case '-':return a-b; case '*':return a*b; case '/':return a/b; } return 0; } int solve(string s) { // write code here stack<int> value; stack<char> ops; for(int i=0;i<s.length();i++) { if(s[i]>='0'&&s[i]<='9') { int a=s[i]-'0'; while(i+1<s.length()&&s[i+1]>='0'&&s[i+1]<='9') { a=a*10+s[i+1]-'0'; i++; } value.push(a); } //处理负号 else if(s[i]=='-'&&(i==0||s[i-1]=='(')) { int a=s[i]-'0'; while(i+1<s.length()&&s[i+1]>='0'&&s[i+1]<='9') { a=a*10+s[i+1]-'0'; i++; } value.push(-a); } else if(s[i]=='(') { ops.push(s[i]); } else if(s[i]==')') { while(!ops.empty()&&ops.top()!='(') { int v2=value.top(); value.pop(); int v1=value.top(); value.pop(); char o=ops.top(); ops.pop(); value.push(applyOp(v1,v2,o)); } if(!ops.empty()) ops.pop(); } else { while(!ops.empty()&&precedence(ops.top())>=precedence(s[i])) { int v2=value.top(); value.pop(); int v1=value.top(); value.pop(); char o=ops.top(); ops.pop(); value.push(applyOp(v1,v2,o)); } ops.push(s[i]); } } while(!ops.empty()) { int v2=value.top(); value.pop(); int v1=value.top(); value.pop(); char o=ops.top(); ops.pop(); value.push(applyOp(v1,v2,o)); } return value.top(); } };