题目描述:
根据逆波兰表示法,求表达式的值。
有效的运算符包括 +
, -
, *
, /
。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
-
整数除法只保留整数部分。
-
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
思路:
遇到数字就入栈,遇到运算符则将栈顶的两个元素弹出计算,计算结果重新入栈。借鉴别人思路,巧妙利用异常来进行运算符的判断。代码如下:
import java.util.*;
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> st=new Stack<Integer>();
for(int i=0;i<tokens.length;i++){
try{
st.push(Integer.parseInt(tokens[i]));
}
catch(Exception e){
int b=st.pop();
int a=st.pop();
int temp=calculate(a,b,tokens[i]);
st.push(temp);
}
}
return st.pop();
}
public int calculate(int a,int b,String operator){
switch(operator){
case "+":
return a+b;
case "-":
return a-b;
case "*":
return a*b;
case "/":
return a/b;
default:
return 0;
}
}
}