网站建设专业导航网站,怎么做网站优,爱电影网站,永久打开本网站的题目 思路
逆波兰表达式也是经典的栈的应用问题。
先说什么是逆波兰表达式#xff08;也叫后缀表达式#xff09;
我们习惯的是这样的表达式#xff1a;1 2 / 3 ,这也叫中缀表达式。
但是对于计算机来说不好理解#xff0c;当从左扫描到 2 的时候还需要再判断2后面是什…题目 思路
逆波兰表达式也是经典的栈的应用问题。
先说什么是逆波兰表达式也叫后缀表达式
我们习惯的是这样的表达式1 2 / 3 ,这也叫中缀表达式。
但是对于计算机来说不好理解当从左扫描到 2 的时候还需要再判断2后面是什么运算符再比较一下 和 / 的运算符的优先级才能计算。
而逆波兰表达式是这样的 1 2 3 / 它没有括号利用栈就可以顺序处理了。
我们把数字放入栈里遇到 - * / 的时候将栈顶的两个元素弹出进行计算把结果放回栈中然后继续扫描。
基础知识
string类内部自己已经重写了equals方法所以它比较的是字符值 equals与的区别面试八股
将字符串转换成int 使用Integer.parseInt()方法
代码
import java.util.Deque;
import java.util.LinkedList;//leetcode submit region begin(Prohibit modification and deletion)
class Solution {public int evalRPN(String[] tokens) {DequeInteger deque new LinkedList();for (String s : tokens) {if (.equals(s))deque.push(deque.pop() deque.pop());else if (-.equals(s))deque.push(-deque.pop() deque.pop());else if (*.equals(s))deque.push(deque.pop() * deque.pop());else if (/.equals(s)) {int b deque.pop();int a deque.pop();deque.push(a / b); // deque.push(1 / deque.pop() * deque.pop()) 不能写成这个因为int类型会向下取整如 1/5*60} elsedeque.push(Integer.parseInt(s));}int res deque.pop();return res;}
}
//leetcode submit region end(Prohibit modification and deletion)我的错误 写成了 ‘-’.equals(s) -它表示的是一个char是一个基本数据类型 而equals比较的是两个对象 写成了deque.push(1 / deque.pop() * deque.pop()) 不能写成这个因为int类型会向下取整如 1/5*60