Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, *, /. Each operand may be an integer or another expression. For example:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
This problem can be solved by using a stack. We can loop through each element in the given array. When it is a number, push it to the stack. When it is an operator, pop two numbers from the stack, do the calculation, and push back the result.
代码
package array.rotateArray;
import java.util.Stack;
/**
* Created by wzy on 15-7-23.
*/
public class Solution {
public static int compute(String array[]) throws Exception {
String ops[] = {"+", "-", "*", "/"};
Stack
stack = new Stack
();
for (String arr : array) {
boolean isOP = false;
for (String op : ops) {
if (arr.contains(op)) {
isOP = true;
break;
}
}
if(isOP) {
int value1 = Integer.parseInt(stack.pop());
int value2 = Integer.parseInt(stack.pop());
int result = 0;
if (arr.equals("+")) {
result = value2 + value1;
} else if (arr.equals("-")) {
result = value2 - value1;
} else if (arr.equals("*")) {
result = value2 * value1;
} else if (arr.equals("/")) {
result = value2 / value1;
}
stack.push(String.valueOf(result));
} else {
stack.push(arr);
}
}
return Integer.parseInt(stack.pop());
}
public static void main(String args[]) {
try {
String array[] = {"2", "1", "+", "3", "*"};
System.out.println(compute(array));
} catch (Exception e) {
throw new IllegalArgumentException();
}
}
}