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

【算法】逆波兰表达式

文章目录

  • 定义
  • 求法
  • 代码思想:

定义

逆波兰表达式也称为“后缀表达式”,是将运算符写在操作数之后的运算式。

求法

*如:(a+b)c-(a+b)/e的转换过程:

  1. 先加上所有的括号。
    (((a+b)*c)-((a+b)/e))
  2. 将所有的运算符移到括号外面
    (((ab)+ c)* ((ab)+ e)/)-
  3. 去掉所有的括号
    ab + c * ab + e /-

所以最终的结果:ab + c * ab + e /-

代码思想:

使用栈这种数据结构进行计算。

  1. 定义一个下标i进行遍历整个字符串
    在这里插入图片描述
  2. 只要不是运算符,那就将操作数入栈。
    在这里插入图片描述
  3. 当遇到操作符,从栈中弹出两个数进行计算,将结果入栈。同时下标i继续向后遍历。
    在这里插入图片描述
  4. 重复上述过程。
    在这里插入图片描述

向后遍历至运算符:
在这里插入图片描述
进行运算,并将结果进行入栈:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
各步运算结果:
在这里插入图片描述
代码:

class Solution {public int evalRPN(String[] tokens) {Stack<Integer> stack = new Stack<>();for (int i = 0; i < tokens.length; i++) {// 将数字入栈等待运算if (!(tokens[i].equals("+")|| tokens[i].equals("-")|| tokens[i].equals("*")|| tokens[i].equals("/"))) {stack.push(Integer.parseInt(tokens[i]));}// 如果是运算符,弹出两个数字进行运算else {int num1 = stack.pop();int num2 = stack.pop();int res = 0;// 进行运算switch (tokens[i]) {case "+":res = num2 + num1;break;case "-":res = num2 - num1;break;case "*":res = num2 * num1;break;case "/":res = num2 / num1;break;default:break;}// 将结果入栈stack.push(res);}}return stack.peek();}
}
http://www.lryc.cn/news/118713.html

相关文章:

  • 添加SQLCipher 到项目中
  • 轻松预约,尽享美食,详解餐厅预约小程序的设计与实现
  • 数据结构--栈和队列3.1(栈-顺序结构)
  • pdf怎么压缩到1m?这样做压缩率高!
  • AttentionFreeTransformer 源码解析(一):AFTFull、AFTSimple、AFTLocal
  • C++ 计算 拟合优度R^2
  • Springboot-Retrofit HTTP工具框架快速使用
  • 微信小程序实现人脸识别(从一个没有开通人脸核身的小程序跳转到要给开通人脸核身的小程序,进行人脸识别后再跳转回来)
  • CSS-grid布局
  • 【JavaEE进阶】Bean 作用域和生命周期
  • 3分钟自建查分系统?现在每个人都可以实现了
  • 关于APP备案、小程序备案的问题,如何备案?
  • git上传代码后,如何清空历史日志以及文件操作,重新上传?以及上传代码
  • 超导热催生meme,换汤不换药的投机轮回
  • 【HashMap】 73. 矩阵置零
  • Vue-2.nodejs的介绍和安装
  • 分别用Vue和Java来实现的风靡一时的2048 游戏
  • echarts甘特图 一个值多条线
  • 多态性说明
  • 2023-08-04 LeetCode每日一题(不同路径 III)
  • 腾讯云服务器地域怎么选?可用区是什么?
  • 第一百二十三天学习记录:C++提高:STL-vector容器(下)(黑马教学视频)
  • 谈谈Spring与字节码生成技术
  • Java数组详解 -- 基础知识与常用操作
  • (统计学习方法|李航)第五章 决策树——一二三节:决策树模型与学习,特征选择,决策树的生成,
  • qt lamda表达式及捕获变量列表符号说明及示例
  • 第十六章、【Linux】程序管理与SELinux初探
  • ElasticSearch索引生命周期管理--DELETE
  • sentinel简单使用
  • C#小轮子:自动连续Ping网络地址