【LeetCode-227】基本计算器 II
问题
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
示例
输入: s = " 3+5 / 2 "
输出: 5
解答
class Solution {
public:
int calculate(string s) {
vector<int> nums;
char sign = '+';
int n = s.size();
for (int i = 0; i < n; i++) {
if (s[i] == ' ') continue;
if (isdigit(s[i])) {
int ans = 0;
while (i < n && isdigit(s[i]))
ans = ans * 10 - '0' + s[i++];
i--;
switch (sign) {
case '+': nums.push_back(ans); break;
case '-': nums.push_back(-ans); break;
case '*': nums.back() *= ans; break;
case '/': nums.back() /= ans;
}
}
else sign = s[i];
}
return accumulate(nums.begin(), nums.end(), 0);;
}
};
重点思路
由于本题没有括号,所以只需要考虑符号优先级即可。这里我们使用数组nums
存储遍历的数字(含正负号),如果当前数字前面的符号为乘除号,此时运算优先级最高,则将nums
最后一个数与当前数字运算。