leetcode每日一道(2):计算逆波兰式(后缀表达式)的值

题目

计算逆波兰式(后缀表达式)的值
运算符仅包含"+","-","*“和”/",被操作数可能是整数或其他表达式
例如:
[“2”, “1”, “+”, “3”, “*”] -> ((2 + 1) * 3) -> 9↵ [“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are+,-,*,/. Each operand may be an integer or another expression.
Some examples:
[“2”, “1”, “+”, “3”, “*”] -> ((2 + 1) * 3) -> 9↵ [“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6

思路

很简单的思路:可以将所有的数字和符号按顺序压入栈中,然后遇到运算符时,就取出栈顶的两个数字进行运算,运算之后又压入栈中,如此遍历一遍,最后栈中只剩最后一个元素,也就是要求的结果了。

代码如下

class Solution {
public:
    int evalRPN(vector<string> &tokens) {
        stack<int> numbers;
        for (auto token: tokens)
        {
            if (token=="+"|| token=="-"||token=="*"||token=="/")
            {
                int a,b, result;
                a = numbers.top();numbers.pop();
                b = numbers.top();numbers.pop();
                if (token=="+")
                    result = a+b;
                else if (token=="-")
                    result = b-a;
                else if (token=="*")
                    result = a*b;
                else
                    result = b/a;
                numbers.push(result);
            }
            else
            {
                stringstream s;
                s << token;
                int cur;
                s>>cur;
                numbers.push(cur);
            }
        }
        return numbers.top();
    }
};

代码主要是熟悉vector,stack,stringstream和auto关键字这几个知识点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值