【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最后一个数与当前数字运算。

posted @ 2021-03-11 11:41  tmpUser  阅读(46)  评论(0编辑  收藏  举报