题目链接:150. 逆波兰表达式求值 - 力扣(LeetCode)
题目描述:
根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
注意 两个整数之间的除法只保留整数部分。
可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
思路:栈中只放运算数,不放运算符,遇到运算数进栈,遇到运算符出栈,计算出结果后,将结果入栈,栈中的最后一个数即为所求的结果。
代码如下:
class Solution {
public int evalRPN(String[] tokens) {
Deque<Long> stack=new LinkedList<>();
for(String c: tokens){
//如果是操作数,入栈
if(!c.equals("+")&&!c.equals("-")&&!c.equals("*")&&!c.equals("/")){
//将String转为long
long n=Long.parseLong(c);
stack.push(n);
}
else{
//取出两个数
long a=stack.pop();
long b=stack.pop();
long ans=fun(a,b,c);
//将结果压入栈中
stack.push(ans);
}
}
Long r=stack.pop();
long e=r.longValue();
//栈中的最后一个数即为所求的结果
return (int)e;
}
public long fun(long a,long b,String c){
if(c.equals("-")){
return b-a;
}
if(c.equals("+")){
return b+a;
}
if(c.equals("/")){
return b/a;
}else{
return b*a;
}
}
}