在我们开始做这道题之前,我们应该知道的前置知识:
上面这个是力扣里面的官方解释,下面有一点我个人转换后缀表达式的的小技巧:
1、先加括号
2、后将符号移动到对应的括号后
3、最后删除括号,即可得到后缀表达式
了解完之后,我们就可以开始做题啦!
力扣链接:
看完题目后,我的思路是:
先把题目所给的表达式遍历一遍:如果遇到的是数字,就将其入栈;否则,遇到了操作符时,就将栈中的数字出栈,再将这样计算所得的结果进行入栈,以此类推...
如图:
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> Stack=new Stack<>();//先创建一个栈,用来存储
for(int i=0;i<tokens.length;i++){//对表达式进行遍历
String x=tokens[i];
if(!isOpration(x)){//判断是否是操作符,不是操作符是数字的话进入
Stack.push(Integer.parseInt(x));//此处将String转换为整数
}else{//进入此处说明为操作符
int num2=Stack.pop();//出栈两个操作数
int num1=Stack.pop();
switch(x){//进行各种操作匹配
case "+":
Stack.push(num1+num2);
break;
case "-":
Stack.push(num1-num2);
break;
case "*":
Stack.push(num1*num2);
break;
case "/":
Stack.push(num1/num2);
break;
}
}
}
//由于题目提示是说:输入的都是一个根据逆波兰表示法表示的算术表达式,因此在所有操作结束之后返回最终结果即可
return Stack.pop();
}
//该函数用来判断是否是操作符
private boolean isOpration(String s){
if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/"))
return true;
return false;
}
}