class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
int solve(string s) {
// write code here
stack<int> ret;
int num = 0;
char sign = '+';
for (int i=0; i<s.size(); ++i) {
if (s[i] >= '0' && s[i] <= '9') {
num = 10 * num + s[i] - '0';
} else if (s[i] == '(') {
int left = i, count = 1;
while (count > 0) {
i++;
if (i >= s.size()) {
throw string("invalid expr");
}
if (s[i] == '(') {
++count;
} else if (s[i] == ')') {
--count;
}
}
num = solve(s.substr(left+1, i - left -1));
}
if (s[i] == '+' || s[i] == '-' || s[i] == '*' || i == s.size() - 1) {
if (sign == '+') {
ret.push(num);
} else if (sign == '-') {
ret.push(-num);
} else if (sign == '*') {
ret.top() *= num;
}
sign = s[i];
num = 0;
}
}
while(!ret.empty()) {
num += ret.top();
ret.pop();
}
return num;
}
};