知识点

后缀表达式 栈

思路

后缀表达式求值,可以一个栈来记录数字,每当遇到预算符号,取出栈顶的两个数字进行运算,把结果重新入栈。

最后的栈顶即为全部的计算结果。

时间复杂度

只遍历了一遍数组,每次出入栈的次数是常数次,时间复杂度为O(n)

AC code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param tokens string字符串vector 
     * @return int整型
     */
    int calculatePostfix(vector<string>& tokens) {
        stack<int> nums;
        for (auto& s : tokens) {
            if (s == "+") {
                auto a = nums.top();
                nums.pop();
                auto b = nums.top();
                nums.pop();
                nums.push(b + a);
            }
            else if (s == "-") {
                auto a = nums.top();
                nums.pop();
                auto b = nums.top();
                nums.pop();
                nums.push(b - a);
            }
            else if (s == "*") {
                auto a = nums.top();
                nums.pop();
                auto b = nums.top();
                nums.pop();
                nums.push(b * a);
            }
            else if (s == "/") {
                auto a = nums.top();
                nums.pop();
                auto b = nums.top();
                nums.pop();
                nums.push(b / a);
            }
            else {
                auto a = stoi(s);
                nums.push(a);
            }
        }
        return nums.top();
    }
};