首先我们了解一下什么叫逆波兰表达式?
逆波兰式,也叫后缀表达式(即运算符写在操作数之后

例: 9 3 /

而我们日常所用的表达式都是中缀表达式,与逆波兰式是不一样的

上述的逆波兰式可能大家已经知道了,用中缀表达式表述:9 / 3

下面我们来试试稍微复杂一点的中缀式转逆波兰式吧!!!

中缀式:1. (2+3) / 5 2. 5 / (3+7) 3. (9+3) * 2 4. (10+3) * ((3+5) / 2)
逆波兰式:1. 2 3 + 5 /2. 5 3 7 + /3. 9 3 + 2 *4. 3 10 + 3 5 + 2 / *

发现没,所有的中缀式转逆波兰式其实是有优先级的,拿中缀式 (2+3) /5 来说转逆波兰式之后就是 2 3 + 5 /了,那么如果是 2+3/5 呢?

2+3/5的逆波兰式就是 2 3 5 / +

大家可以仔细想想为什么不一样?

是因为在 2+3/5这个表达式里,先运算的是3/5,而在(2+3) /5里,先运算的2+3。优先级不同所以最后的逆波兰式也是不一样的。

public class Main{//逆波兰表达式求值public static void main(String[] args) {String[] tokens={"10","6","9","3","+","-11","*","/","*","17","+","5","+"};int res=Integer.MAX_VALUE;for(int i=0;i<tokens.length;i++){int operator=isOperator(tokens[i]);if(operator==-1)continue;int num1=isNum(tokens,i);int num2;//第一次运算时,num1应与num2调换,再寻找下一位符号位更近的数字//例: 9 3 /  num1:9 num2:3 operator:/if(res==Integer.MAX_VALUE){num2=num1;num1=isNum(tokens,i);}else num2=res;if(operator==1)res=num1+num2;else if(operator==2)res=num1-num2;else if(operator==3)res=num1*num2;else if(operator==4)res=num1/num2;}System.out.println(res);}//判断是否为运算符static int isOperator(String str){if(str=="+")return 1;if(str=="-")return 2;if(str=="*")return 3;if(str=="/")return 4;return -1;}//返回离符号最近的数字static int isNum(String[] str,int index){while(index>=0){if(Character.isDigit(str[index].charAt(0))){int val= Integer.parseInt(str[index]);str[index]=".";return val;}index--;}return 0;}
}

逆波兰式求值 —Java相关推荐

  1. java逆波兰式求值_波兰式、逆波兰式与表达式求值

    波兰式.逆波兰式是<数据结构>课程中讲解关于栈的时候提到的,栈是很简单的一种数据结构.但是这些理论的提出却是计算机早期发展领域的重大突破,值得仔细回味. 1. 中缀表达式 我们在数学中学到 ...

  2. 【Java版oj】逆波兰表达式求值

    目录 一.原题再现 二.问题分析 三.完整代码 一.原题再现 150. 逆波兰表达式求值 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除 ...

  3. 数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6

    括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现) 逆波兰表达式求值问题(点我 ...

  4. 代码随想录第11天 | LeetCode20. 有效的括号、LeetCode1047. 删除字符串中的所有相邻重复项、LeetCode150. 逆波兰表达式求值

    day11 | LeetCode20. 有效的括号.LeetCode1047. 删除字符串中的所有相邻重复项.LeetCode150. 逆波兰表达式求值 文章目录 day11 | LeetCode20 ...

  5. 算法训练第十一天|力扣20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

    20. 有效的括号 题目链接:有效的括号 参考:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B ...

  6. 逆波兰表达式求值(leetcode 150)

    文章目录 1.问题描述 2.难度等级 3.热门指数 4.解题思路 5.实现示例 5.1 C++ 5.2 Golang 参考文献 1.问题描述 逆波兰表达式也叫后缀表达式. 有效的算符包括 +.-.*. ...

  7. JavaScript逆波兰表达式求值

    逆波兰表达式简介 逆波兰表达式又叫做后缀表达式.逆波兰表示法是波兰逻辑学家J・卢卡西维兹(J・ Lukasiewicz)于1929年首先提出的一种表达式的表示方法 .后来,人们就把用这种表示法写出的表 ...

  8. LetCode: 150. 逆波兰表达式求值

    提示 LintCode中的相关算法题实现代码,可以在我的GithHub中下载. 题目需求 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另 ...

  9. 复习栈和队列,详解最小栈,栈的弹出压入序列,逆波兰表达式求值

    栈和队列的概念 栈:吃进去吐出来 对列:吃进去拉出来 数据结构中的栈和内存中的区别 数据结构中的栈具有后进先出的特性,而内存中的栈是一个内存空间,只不过这个内存空间具与数据结构的栈具有相同的特性. 栈 ...

最新文章

  1. Java 抽象方法和抽象类基础知识
  2. 学习构建WDF驱动程序 - 初步了解SOURCE和makefile文件
  3. 计算机网络利用率是什么_当我们在谈论高并发的时候究竟在谈什么?
  4. openlayers小车_openlayer 车辆跟着轨迹移动
  5. java session 生命周期_java之hibernate之session中对象的生命周期
  6. windows 下eclipse 连HBASE
  7. 数据可视化工具的特点有哪些
  8. STM32CubeMX使用(四)之DMA方式使用ADC
  9. 阻止 Mac 进入睡眠模式保持清醒的 5 种方法
  10. CPU制造工艺完整过程(图文)
  11. STM32 易阅读的代码风格
  12. android 使用ffmpeg 调用命令实现视频转gif(ffmpeg 学习三)
  13. eclipse JRebel破解
  14. Axure _ 原型图
  15. mysql-repeatable read可以避免幻读
  16. 2021全国大学生数学建模竞赛论文格式规范
  17. 海报分享功能实现详解
  18. 机器视觉问题:工业普通定焦镜头如何计算景深?景深计算
  19. 关于archlinux的使用
  20. Unity 编辑器批量修改Prefab

热门文章

  1. OpenJ_Bailian - 3164 奇偶排序
  2. HTML+JS 实现监控切屏
  3. 中国石油大学《微观经济学》第一次在线作业
  4. 3Dtouch 基本原理
  5. 智能车OS照搬安卓没有出路,特别是在中国
  6. win10安装账户卡住_简单几步解决win10安装卡死在用户名的问题
  7. 大二暑期第四周学习总结
  8. echarts实现中国地图踩过的坑--------有些省的value可以拿到,有些省的value拿不到
  9. ftp linux 推送文件_Linux文件传输FTP详解
  10. type c 网卡 外接网卡 禁用后 不见 消失 找不到 的解决办法