leetcode 224 基本计算器
看到这道题让我想到最近做的NJU的PA1里面的表达式计算
这道题因为没有*和/所以不需要考虑优先级的问题
官方题解的思路是:
声明sign ret num变量分别代表符号 结果 和数字
2.遇到- 变号
3.遇到"(" 将sign入栈
4.遇到")" 代表处出栈
5.遇到数字先提取出整个数字然后ret+=num*sigh
最后返回ret
代码如下:
class Solution {
public:
int calculate(string s) {
stack ops;
ops.push(1);
int sign = 1;
int ret = 0;
int n = s.length();
int i = 0;
while (i < n) {
if (s[i] == ' ') {
i++;
} else if (s[i] == '+') {
sign = ops.top();
i++;
} else if (s[i] == '-') {
sign = -ops.top();
i++;
} else if (s[i] == '(') {
ops.push(sign);
i++;
} else if (s[i] == ')') {
ops.pop();
i++;
} else {
long num = 0;
while (i < n && s[i] >= '0' && s[i] <= '9') {
num = num * 10 + s[i] - '0';
i++;
}
ret += sign * num;
}
}
return ret;
}
};
相关题目是leetcode的150题
https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/