利用递归解决括号问题:将括号中的字符串表达式看成子表达式,输入函数solve求值。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
int solve(string s) {
// write code here
int num = 0, flag = 1, ff = 0;
string ss = "";
stack<int> snum;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '(') {
if (ff > 0) ss = ss + s[i]; ///非最左侧的左括号,加入子表达式ss中
ff += 1;
} else if (s[i] == ')') {
if (ff > 1) ss = ss + s[i]; //非最右侧的右括号,加入子表达式ss中
ff -= 1;
if (ff == 0) { //遇到最右侧的右括号,将子表达式ss输入到函数solve()求值(递归)
num = solve(ss);
ss = "";
}
} else if (ff != 0) {
ss = ss + s[i];
} else if (isdigit(s[i])) {
num = num * 10 + (s[i] - '0');
} else if (s[i] == '+') {
snum.push(flag * num);
flag = 1;
num = 0;
} else if (s[i] == '-') {
snum.push(flag * num);
flag = -1;
num = 0;
} else if (s[i] == '*') {
flag = flag * num;
num = 0;
}
}
snum.push(flag * num);
int out = 0;
while (!snum.empty()) {
out += snum.top();
snum.pop();
}
return out;
}
};