class Solution {
public:
int solve(string s) {
int S=0,n=0,i=0,N=0,C,l;char k='+';
for(;i<s.size();i++){
if(isdigit(s[i]))n=10*n+s[i]-48;
if(s[i]=='('){
for(l=++i,C=1;C;i++)C+=s[i]==')'?-1:s[i]=='(';
n=solve(s.substr(l,--i-l));
}if(i==s.size()-1||s[i]=='+'||s[i]=='-'||s[i]=='*')
k=='*'?N*=n:(S+=N,N=k=='-'?-n:n),k=s[i],n=0;
}return S+N;
}
};
不用栈,递归做法,超简短

京公网安备 11010502036488号