题目
思路
这个题目可以用栈来实现
- 首先判断输入的是数字字符还是运算符
- 如果是数字 就把数字字符串转化为数字压入栈中
- 如果是运算符从栈中弹出两个数字 第一个被弹出的数字为运算符右侧的数字 第二个弹出的数字为运算符左侧的数字 运算后在压入栈中
- 最后返回栈中的元素就是结果
代码实现
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> number = new Stack<>();
//建立一个栈存放操作数
for(int i = 0; i < tokens.length; i++){
//遍历字符串数组
if(isOpera(tokens[i])){
//如果是操作符
int num2 = number.pop();
int num1 = number.pop();
//从栈中弹出两个元素
switch(tokens[i]){
//switch语句判断是什么运算符
//运算结束将结果压入栈
case "+":
number.push(num1 + num2);
break;
case "-":
number.push(num1 - num2);
break;
case "*":
number.push(num1 * num2);
break;
case "/":
number.push(num1 / num2);
break;
}
}else{
//如果是数字
//将字符串转化为数字 在压入栈
number.push(Integer.parseInt(tokens[i]));
}
}
//返回栈中的元素
return number.pop();
}
public boolean isOpera(String str){
//判断是否为操作符
if(str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")){
return true;
}
return false;
}
}