计算逆波兰式(后缀表达式)的值
题目描述
计算逆波兰式(后缀表达式)的值
运算符仅包含"+","-","“和”/",被操作数可能是整数或其他表达式
例如:
[“2”, “1”, “+”, “3”, ""] -> ((2 + 1) * 3) -> 9↵ [“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6
解析
利用栈来对逆波兰表达式求值过程
1.建立一个栈
2. 遍历数组
遇到数字入栈,遇到运算符依次弹出两个数进行运算,把运算结果入栈
3.弹出最终运算结果作为返回值
图解以 [“2”, “1”, “+”, “3”, “*”]为例
左边蓝色矩形代表栈,开始遍历数组
遇到数值入栈:
遇到运算符依次弹出栈顶元素,进行运算,运算后的结果入栈。
数组循环完return stack.pop();
代码
import java.util.Stack;
public class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<Integer>();
for (int i=0; i<tokens.length;i++){
//遇见数字入栈,遇见操作符出栈两位
if (tokens[i].equals("+") || tokens[i].equals("-") ||tokens[i].equals("/")){
int second =stack.pop();
int first=stack.pop();
switch (tokens[i]){
case "+":
stack.push(first + second) ;
break;
case "-":
stack.push(first - second) ;
break;
case "/":
stack.push(first / second) ;
break;
case "*":
stack.push(first * second) ;
}
}else {
stack.push(Integer.parseInt(tokens[i]));
}
}
return stack.pop();
}
}