150.逆波兰表达式求值
1.题目描述:
根据逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况
链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation
2.解题思路及代码
利用栈的特性,遍历表达式,若遇到运算对象则加入栈中,若遇到运算符号,则调取栈顶的2个元素进行运算,结果加到栈顶;
代码如下:
class Solution { public int evalRPN(String[] tokens) { Stack<Integer> s=new Stack<Integer>(); for(String x:tokens) { if(x.equals("+")) s.push(s.pop()+s.pop()); else if(x.equals("-")) s.push(-s.pop()+s.pop()); else if(x.equals("*")) s.push(s.pop()*s.pop()); else if(x.equals("/")) { int tmp=s.pop(); s.push(s.pop()/tmp); }else s.push(Integer.valueOf(x)); } return s.pop(); } }