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; } };