2025年- G33-Lc107-150. 评估逆波兰表示法--java版
1.题目描述
2.思路
(1)遇到数字,将数字压入栈中,遵循先进后出得策略
(2)遇到运算符,先从栈顶弹出两个元素,进行计算,把结果压入栈中
例子1:
3.代码实现
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> s=new Stack<>();
for(String token:tokens)
{ //tokens是字符串,有运算符也有数字
if(isOperator(token))
{
int b=s.pop(); //出栈顺序b,a
int a=s.pop();
s.push(applyOperator(a,b,token)); //b,a做运算之后,把结果压入栈中,参数的顺序和构造方法一样
}
else
{
s.push(Integer.parseInt(token));//如果token不是运算符,也就是操作数,直接压入栈中
}
}
return s.pop();//栈中最终只会剩下一个元素,这就是计算结果
//return s.peek();//可以查看最后返回的栈顶元素
}
private boolean isOperator(String token)
{
return token.equals("+")||token.equals("-")||token.equals("*")||token.equals("/");
//return "+-*/".contains(token);
}
private int applyOperator(int a, int b, String op)//入栈顺序a,b
{
switch(op){
case"+": return a+b;
case"-":return a-b;
case"*":return a*b;
case"/":return a/b;
default:throw new IllegalArgumentException("无效的运算符: " +op);
}
}
}