题目描述
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
Some examples:
[“2”, “1”, “+”, “3”, ““] -> ((2 + 1) 3) -> 9
[“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6
题意是计算给定表达式的值,将操作数放在一个栈中,每遇到一个操作符从栈中弹出两个数字。
package sxd.learn.java.leetcode;
/**
*
* @author lab
* 2016/5/12
* Evaluate the value of an arithmetic expression in
* Reverse Polish Notation.
*/
public class Leetcode2 {
public static void main(String[] args) {
String[] test = { "0", "3", "/" };
System.out.println(evalRPN(test));
}
public static int evalRPN(String[] tokens) {
java.util.Stack<Integer> numStack = new java.util.Stack<>();
String num = null;
for (int i = 0; i < tokens.length; i++) {
num = tokens[i];
if (!isOper(num)) {
numStack.push(Integer.parseInt(num));
} else {
int num1 = numStack.pop();
int num2 = numStack.pop();
numStack.push(operation(num, num1, num2));
}
}
return numStack.pop();
}
public static boolean isOper(String str){
if(str.length() == 1){
if(str.charAt(0) == '+' || str.charAt(0) == '-')
return true;
else if(str.charAt(0) == '*' || str.charAt(0) == '/')
return true;
return false;
}
return false;
}
public static int operation(String op, int num1, int num2) {
int num = 0;
switch (op) {
case "+":
num = num2 + num1;
break;
case "-":
num = num2 - num1;
break;
case "*":
num = num2 * num1;
break;
case "/":
num = num2 / num1;
break;
default:
break;
}
return num;
}
}