给定牛牛一个后缀表达式s,计算它的结果,例如,1+1对应的后缀表达式为1#1#+,‘#’作为操作数的结束符号。
其中,表达式中只含有‘+’、’-‘、’*‘三种运算,不包含除法。

题解:利用栈进行模拟,摸清栈先进后出的特性,利用这一特性即可方便的计算后缀表达式。先用栈保存数字,在遇到运算符时取栈顶的两个元素进行运算后再放回栈顶即可。

时间复杂度:图片说明
空间复杂度:图片说明

参考代码:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 给定一个后缀表达式,返回它的结果
     * @param str string字符串 
     * @return long长整型
     */
    long long solve(string str) {
        // write code here
        stack<long long> n;
        long long s = 0, x = 0, y = 0;
        for (int i = 0; i < str.size(); i++)
        {
            switch (str[i])
            {
            case '+':
                x = n.top();
                n.pop();
                y = n.top();
                n.pop();
                n.push(x + y);
                break;
            case '-':
                x = n.top();
                n.pop();
                y = n.top();
                n.pop();
                n.push(y - x);
                break;
            case '*':
                x = n.top();
                n.pop();
                y = n.top();
                n.pop();
                n.push(x * y);
                break;
            case '/':
                x = n.top();
                n.pop();
                y = n.top();
                n.pop();
                n.push(y / x);
                break;
            case '#':
                n.push(s);
                s = 0;
                break;
            default:
                s = s * 10 + str[i] - '0';
                break;
            }
        }
        return n.top();
    }
};