支持加减操作
支持加减乘除操作
支持加减乘除和括号操作
这个是vip题目,可以在这里牛客或这里lintcode看到替代的题目,是一样的
这里面设计到的一个共同的问题就是计算一个表达式的值的问题,我们可以使用递归或者栈的方式来解决这个问题。实际上递归也是栈的应用,两种方法是一样的。
class Solution {
public:
int parseNum(string& s, int& i) {
int n = 0;
while(i < s.length() && isdigit(s[i])) n = s[i++] - '0' + 10 * n;
return n;
}
int parseExpr(string& s, int& i) {
vector<int> nums;
char op = '+';
for (; i < s.length() && op != ')'; i++) { //右括号可以结束递归
if (s[i] == ' ') continue;
int n;
if(s[i] == '(') n = parseExpr(s, ++i); //左括号开始递归
else n = parseNum(s, i); //求值
switch(op) {
// 加法和减法都放到nums里
case '+' : nums.push_back(n); break; //加法
case '-' : nums.push_back(-n); break; //减法
// 乘法和除法可以直接算
case '*' : nums.back() *= n; break; //乘法
case '/' : nums.back() /= n; break; //除法
}
op = s[i];
}
return accumulate(nums.begin(), nums.end(), 0);
}
int calculate(string &s) {
int i = 0;
return parseExpr(s, i);
}
};