Evaluate Reverse Polish Notation

简介:

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:   ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9   ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

  • 题目大意:给定一个逆波兰表达式,求该表达式的值
  • 思路:由于逆波兰表达式本身不需要括号来限制哪个运算该先进行,因此可以直接利用栈来模拟计算:遇到操作数直接压栈,碰到操作符直接取栈顶的2个操作数进行计算(注意第一次取出来的是右操作数),然后再把计算结果压栈,如此循环下去。最后栈中剩下的唯一一个元素便是整个表达式的值
  • 实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class  Solution {
public :
     int  evalRPN(vector<string> &tokens) {
         
         int  result = 0;
         int  i;
         stack< int > opd;          //存储操作数
         int  size = tokens.size();
         for (i=0;i<size;i++)
         {
             if (tokens[i]== "*" )
             {
                 int  rOpd = opd.top();    //右操作数
                 opd.pop();
                 int  lOpd = opd.top();   //左操作数
                 opd.pop();
                 result = lOpd*rOpd;
                 opd.push(result);
             }
             else  if (tokens[i]== "/" )
             {
                 int  rOpd = opd.top();
                 opd.pop();
                 int  lOpd = opd.top();
                 opd.pop();
                 result = lOpd/rOpd;
                 opd.push(result);
             }
             else  if (tokens[i]== "+" )
             {
                 int  rOpd = opd.top();
                 opd.pop();
                 int  lOpd = opd.top();
                 opd.pop();
                 result = lOpd+rOpd;
                 opd.push(result);
             }
             else  if (tokens[i]== "-" )
             {
                 int  rOpd = opd.top();
                 opd.pop();
                 int  lOpd = opd.top();
                 opd.pop();
                 result = lOpd-rOpd;
                 opd.push(result);
             }
             else
             {
                 opd.push( atoi (tokens[i].c_str()));
             }
         }
         return  opd.top();
     }
};

本文转载自海 子博客园博客,原文链接:http://www.cnblogs.com/dolphin0520/p/3708587.html如需转载自行联系原作者

相关文章
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
605 214
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
847 61
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1251 157
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
241 138
|
7天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
521 109