150. 逆波兰表达式求值
题目链接:力扣
思路
首先要知道什么是逆波兰表达式,逆波兰表达式是后缀表达式,我们平时看到的表达式为中缀表达式
逆波兰表达式是为了让计算机更加准确的计算。当见到一个数的时候就把它推入栈中;在遇到一个运算符的时,该运算符就作用于该栈弹出的两个数上,再将所得的结果推入栈中
在代码书写的过程中,因为推入顺序的原因,- 号运算和 / 号运算 需要左特殊处理 ,后推出的 -(/)前推出的
逆波兰表达式求值
如果是数字,就推出栈;如果是运算符,就弹出两个数字运算,再将结果推入栈
最后栈中剩下的就是结果
class Solution { public int evalRPN(String[] tokens) { // 定义一个栈 Stack<Integer> stack = new Stack<>(); for (String s : tokens) { if ("+".equals(s)) { stack.push(stack.pop() + stack.pop()); } else if ("-".equals(s)) { stack.push(-stack.pop() + stack.pop()); } else if ("*".equals(s)) { stack.push(stack.pop() * stack.pop()); } else if ("/".equals(s)) { int temp1 = stack.pop(); int temp2 = stack.pop(); stack.push( temp2 / temp1 ); } else { stack.push(Integer.parseInt(s)); } } return stack.pop(); } }