【LeetCode】150. 逆波兰表达式求值

根据逆波兰表示法,求表达式的值。

有效的运算符包括 +-*/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明:

  • 整数除法只保留整数部分。
  • 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

解题思路:首先搞清楚基本的数学原理,即遇到符号时,需要操作的是前两个元素,使用栈的保存方式,遇到数字入栈,遇到符号把栈头两个元素出栈进行运算,再把结果压入栈内。

int Solution::evalRPN(vector<string>& tokens)
{
    stack<int> StackPoland;
    int temp1 = 0;
    int temp2 = 0;
    unsigned int index = 0;
    
    for(index = 0; index < tokens.size(); index ++)
    {
        temp1 = temp2 = 0;
        if(tokens[index] == "+")
        {
            temp1 = StackPoland.top();
            StackPoland.pop();
            temp2 = StackPoland.top();
            StackPoland.pop();
            StackPoland.push(temp1 + temp2);
        }
        else if(tokens[index] == "/")
        {
            temp1 = StackPoland.top();
            StackPoland.pop();
            temp2 = StackPoland.top();
            StackPoland.pop();
            StackPoland.push(temp2 / temp1);
        }
        else if(tokens[index] == "*")
        {
            temp1 = StackPoland.top();
            StackPoland.pop();
            temp2 = StackPoland.top();
            StackPoland.pop();
            StackPoland.push(temp2 * temp1);
        }
        else if(tokens[index] == "-")
        {
            temp1 = StackPoland.top();
            StackPoland.pop();
            temp2 = StackPoland.top();
            StackPoland.pop();
            StackPoland.push(temp2 - temp1);
        }
        else
        {
            StackPoland.push(stoi(tokens[index]));
        }
    }
    return StackPoland.top();
}

猜你喜欢

转载自blog.csdn.net/syc233588377/article/details/86136636
今日推荐