evaluate-reverse-polish-notation

本文介绍了一种利用栈的数据结构解决逆波兰表达式求值问题的方法。通过遍历表达式,遇到数字压栈,遇到运算符则弹出栈顶的两个数字进行计算并将结果压回栈中,最终栈顶的数字即为表达式的值。

题目描述:

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:

1   ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
2   ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

解题思路:

  题目考察栈的使用,Reverse Polish Notation也是《数据结构与算法分析--C语言描述》一书讲解栈时所举例子之一。

  计算逆波兰表达式时,先定义一个栈对象stack,遍历给定的表达式,遇到数字时将其push进stack中,遇到运算符时,从stack中pop出两个操作数。

  根据操作符进行相应计算后,将结果push进stack中。

  最终stack中应该只有一个元素,即表达式的计算结果。

代码:

 1 class Solution {
 2 public:
 3     int evalRPN(vector<string> &tokens) {
 4         stack <int> nums;
 5         for (auto token : tokens) {
 6             if (token == "+" || token == "-" || token == "*" || token == "/") {
 7                 int tmp1 = nums.top();
 8                 nums.pop();
 9                 int tmp2 = nums.top();
10                 nums.pop();
11                 nums.push(cal(tmp2,tmp1,token));
12             } else {
13                 nums.push(stoi(token));
14             }
15         }
16         return nums.top();
17     }
18     
19     int cal(int a, int b, const string& token) {
20         if (token == "+")
21             return a+b;
22         else if (token == "-")
23             return a-b;
24         else if (token == "*")
25             return a*b;
26         else
27             return a/b;
28     }
29 };

 

转载于:https://www.cnblogs.com/gsz-/p/9368008.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值