1、栈
我们可以使用栈来实现数字的加减乘除。对于字符串中的每一个元素:1、若其为数字,则将其转化为 int
类型并保存为num
;2、若为加号,则将当前数字加入栈中,最后计算总和;3、若为减号,则将当前数字的相反数加入栈中,最后计算总和;4、若为乘号或除号,则直接用当前栈中的栈顶元素与我们临时保存的num
进行乘除运算后加入栈中。
值得注意的是,这里的num
保存的是符号后面的元素。为此我们默认一开始的符号是+
。最终我们只需要对栈中的元素进行累加即可。
class Solution {
public:
int calculate(string s) {
vector<int> stk;
char preSign = '+';
int num = 0;
int n = s.length();
for (int i = 0; i < n; ++i) {
if (isdigit(s[i])) {
num = num * 10 + int(s[i] - '0');
}
if (!isdigit(s[i]) && s[i] != ' ' || i == n - 1) {
switch (preSign) {
case '+':
stk.push_back(num);
break;
case '-':
stk.push_back(-num);
break;
case '*':
stk.back() *= num;
break;
default:
stk.back() /= num;
}
preSign = s[i];
num = 0;
}
}
return accumulate(stk.begin(), stk.end(), 0);
}
};