LeetCode 150.逆波兰表达式求值

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

LeetCode 150.逆波兰表达式求值_第1张图片

题目解析

        首先我们需要知道什么是逆波兰表达式,像我们平常遇到的都是中缀表达式,然而逆波兰确实后缀表达式,因此这个题目隐含的意思就是将一个后缀表达式转换为中缀表达式,并计算它的值。

        本题使用栈来进行存储遍历到的数据,当我们遍历到数字的时候将该数字入栈,如果遍历到运算符就出栈两个数进行运算符的操作,然后将结果入栈。最终剩下的栈顶元素就是我们需要的答案。

代码

class Solution 
{
public:
    int evalRPN(vector& tokens) 
    {
        // stoi
        // "+" "-" "*" "/"
        stack st;
        for(auto str:tokens)
        {
            if(str=="+"||str=="-"||str=="*"||str=="/")
            {
                int right=st.top();
                st.pop();
                int left=st.top();
                st.pop();
                switch(str[0])
                {
                    case '+':
                    {
                        int ret=left+right;
                        st.push(ret);
                        break;
                    }
                    case '-':
                    {
                        int ret=left-right;
                        st.push(ret);
                        break;
                    }
                    case '*':
                    {
                        int ret=left*right;
                        st.push(ret);
                        break;
                    }
                    case '/':
                    {
                        int ret=left/right;
                        st.push(ret);
                    }
                    default:
                    {}
                }
            }
            else
            {
                int target=stoi(str);
                st.push(target);
            }
        }
        return st.top();
    }
};

你可能感兴趣的:(算法练习,leetcode,算法)