題目
難度:困難
類型:遞歸 棧
class Solution {
public:
int calculate(string s) {
int j = 0;
for(int i = 0; i < s.size(); ){
while(i < s.size() && s[i]==' ') i++;
while(i < s.size() && s[i] != ' ') s[j++] = s[i++];
while(i < s.size() && s[i]==' ') i++;
}
int st = 0;
s.erase(j);
s+=' ';
return helper(s, st);
}
int helper(string& s, int &i){
long long num = 0, prev = 0, sum = 0;
char prevOp = '+';
while(i < s.size()){
if(isdigit(s[i])) num = num*10-'0'+s[i++];
else if(s[i]=='('){
num = helper(s, ++i);
}else{
switch(prevOp){
case '+':
sum += prev;
prev = num;
break;
case '-':
sum +=prev;
prev = -num;
break;
case '*':
prev *= num;
break;
case '/':
prev/=num;
break;
}
if(s[i]==')'){
i++;
break;
}
prevOp = s[i];//操作符
num = 0; //數字重置
i++;
}
}
return int(sum + prev);
}
};