根据逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
利用栈,将字符串数组中的数字进行入栈操作,碰到算数符进行出栈,将出栈两个数字进行相应操作把结果存入栈中。计算最后栈顶字符即为结果。
class Solution {
public int evalRPN(String[] tokens) {
String str1, str2;
int num1, num2;
int temp;
Stack <String> stack = new Stack<>();
for(int i = 0; i < tokens.length; i++) {
//将数字入栈
if(!tokens[i].equals("+") && !tokens[i].equals("-") && !tokens[i].equals("*") && !tokens[i].equals("/")) {
stack.push(tokens[i]);
}
else {//碰到算数符出栈。
str2 = stack.pop();//第一个出栈数字作为第二计算数字。
str1 = stack.pop();//第二个出栈数字作为第一个计算数字。
num2 = Integer.parseInt(str2);//转换为整形
num1 = Integer.parseInt(str1);
if(tokens[i].equals("+")) { //进行相应计算
temp = num1 + num2;
}
else if(tokens[i].equals("-")) {
temp = num1 - num2;
}
else if(tokens[i].equals("*")) {
temp = num1 * num2;
}
else {
temp = num1 / num2;
}
stack.push(String.valueOf(temp)); //将中间结果转换为字符串在存入栈中。
}
}
return Integer.parseInt(stack.peek()); //最后栈顶即为计算的结果。转换为整形输出。
}
}