AB4 逆波兰表达式求值
描述
给定一个逆波兰表达式,求表达式的值。
数据范围:表达式长度满足 1≤n≤(10的四次方),表达式中仅包含数字和 + ,- , * , /,其中数字的大小满足 ∣val∣≤200。
示例:
输入 [“2”,“1”,“+”,“4”,“*”]
返回值 12
我的实现:
将数值放入栈中,当遇到运算符时出栈进行计算,并将计算的结果入栈,最后返回栈顶的值,即为最终的计算结果。其实第一个判断可以省略,放到switch语句的default里面,就不用匹配operation了。
import java.util.Stack;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param tokens string字符串一维数组
* @return int整型
*/
public int evalRPN (String[] tokens) {
// write code here
if (tokens.length == 0 || tokens == null) return 0;
Stack<Integer> stack = new Stack<Integer>();
String operation = "+-*/";
for (String token : tokens) {
if (!operation.contains(token)) {
stack.push(Integer.parseInt(token));
} else {
int num2 = stack.pop();
int num1 = stack.pop();
switch (token) {
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();
}
}