当前位置: 首页 > news >正文

逆波兰表达式求值

这段代码实现了一个用来计算逆波兰表达式(Reverse Polish Notation, RPN)的算法。逆波兰表达式是一种后缀表达式,操作符在操作数的后面。这个算法通过使用栈来逐步求值表达式中的操作数和操作符。

代码:

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** @param tokens string字符串vector * @return int整型*/int evalRPN(vector<string>& tokens) {// 定义一个整数栈,用于存储操作数stack<int> stk;// 遍历所有的 tokensfor(int i = 0; i < tokens.size(); ++i) {// 判断当前字符串是否为操作符if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {// 获取栈顶的两个操作数int num1 = stk.top();stk.pop();int num2 = stk.top();stk.pop();// 根据操作符执行相应的计算if(tokens[i] == "+") stk.push(num2 + num1); // 加法else if(tokens[i] == "-") stk.push(num2 - num1); // 减法else if(tokens[i] == "*") stk.push(num2 * num1); // 乘法else stk.push(num2 / num1); // 除法}else {// 当前字符串是操作数,将其转换为整数后压入栈中stk.push(stoi(tokens[i]));}}// 最终栈顶的元素即为表达式的计算结果,返回该值return stk.top();}
};

代码流程总结

  1. 定义一个整数栈 stk 用于存储操作数。
  2. 遍历 tokens 中的每个字符串:
    • 如果当前字符串是操作符,弹出栈顶的两个操作数,进行相应的计算,将结果压入栈中。
    • 如果当前字符串是操作数,将其转换为整数并压入栈中。
  3. 遍历结束后,栈中剩下的唯一一个元素就是表达式的结果,返回这个值。

示例

  • 输入: tokens = ["2", "1", "+", "3", "*"]

    • 计算步骤:
      • 2 压栈
      • 1 压栈
      • + 取出 12,计算 2 + 1 = 3,结果 3 压栈
      • 3 压栈
      • * 取出 33,计算 3 * 3 = 9,结果 9 压栈
    • 输出: 9
  • 输入: tokens = ["4", "13", "5", "/", "+"]

    • 计算步骤:
      • 4 压栈
      • 13 压栈
      • 5 压栈
      • / 取出 513,计算 13 / 5 = 2,结果 2 压栈
      • + 取出 24,计算 4 + 2 = 6,结果 6 压栈
    • 输出: 6

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 安卓13 背光反向 亮度反向 android13 backlight reverse
  • ThinkPHP之入门讲解
  • 2024公立医院绩效考核进行中,契约锁电子签章助力电子病历评级
  • C语言入门基础知识(持续更新中)
  • Visual Basic 6.0教程/Visual Basic从入门到实践/Visual Basic学习视频教程
  • 【Qt】QLCDNumber | QProgressBar | QCalendarWidget
  • 高级java每日一道面试题-2024年8月30日-基础篇-你对泛型了解多少?
  • 【jvm】栈帧的内部结构
  • docker基础到进阶
  • 科研项目经费管理,降本增效的不二之选
  • 【网络安全】服务基础第一阶段——第二节:Windows系统管理基础----虚拟化IP地址以及用户与组管理
  • SAP 有趣的‘bug‘ 选择屏幕输入框没了
  • redis分布式是如何实现的(面试版)
  • Unity URPShader支持多光源处理
  • Qt杂项功能实现
  • Android 控件背景颜色处理
  • Java读取Properties文件的六种方法
  • Linux中的硬链接与软链接
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • php的插入排序,通过双层for循环
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • spring + angular 实现导出excel
  • Vue.js 移动端适配之 vw 解决方案
  • 如何合理的规划jvm性能调优
  • 设计模式 开闭原则
  • 探索 JS 中的模块化
  • 终端用户监控:真实用户监控还是模拟监控?
  • # Panda3d 碰撞检测系统介绍
  • ### RabbitMQ五种工作模式:
  • #ifdef 的技巧用法
  • $.ajax中的eval及dataType
  • (C语言)共用体union的用法举例
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Sql Server 保留几位小数的两种做法
  • (自用)gtest单元测试
  • *Django中的Ajax 纯js的书写样式1
  • .“空心村”成因分析及解决对策122344
  • .NET Project Open Day(2011.11.13)
  • .NET 指南:抽象化实现的基类
  • .NET未来路在何方?
  • .so文件(linux系统)
  • @Autowired和@Resource装配
  • @RequestMapping 的作用是什么?
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [ 网络通信基础 ]——网络的传输介质(双绞线,光纤,标准,线序)
  • [20171113]修改表结构删除列相关问题4.txt
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [AI Google] Ask Photos: 使用Gemini搜索照片的新方法
  • [Android]Android开发入门之HelloWorld