自己一开始竟然还写了一种反着做的,也是棒棒哒。。。
public class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
String operators = "+-*/";
for (String str: tokens) {
if (!operators.contains(str)) {
stack.push(Integer.valueOf(str));
} else {
int num1 = stack.pop();
int num2 = stack.pop();
int index = operators.indexOf(str);
switch(index){
case 0:
stack.push(num1 + num2);break;
case 1:
stack.push(num2 - num1);break;
case 2:
stack.push(num1 * num2);break;
case 3:
stack.push(num2 / num1);break;
}
}
}
return stack.pop();
}
}
//啦啦啦哈哈哈海昏侯
public static int evalRPN(String[] tokens) {
Stack<String> stack1 = new Stack<>();
Stack<String> stack2 = new Stack<>();
for (String str: tokens) {
stack1.push(str);
}
int num = 0, result = 0;
boolean flag = true;
while (!stack1.isEmpty()) {
String str = stack1.pop();
if (str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")) {
stack2.push(str);
num = 0;
} else {
if (num == 0) {
stack2.push(str);
num++;
} else {
int num1 = Integer.valueOf(stack2.pop());
int num2 = Integer.valueOf(str);
String operator = stack2.pop();
if (operator.equals("+")) {
result = num1 + num2;
} else if (operator.equals("-")) {
result = num2 - num1;
} else if (operator.equals("*")) {
result = num1 * num2;
} else if (operator.equals("/")) {
result = num2 / num1;
}
num = 1;
while (!stack2.isEmpty()&&!(stack2.peek().equals("+") || stack2.peek().equals("-") || stack2.peek().equals("*") || stack2.peek().equals("/"))) {
num1 = Integer.valueOf(stack2.pop());
num2 = result;
operator = stack2.pop();
if (operator.equals("+")) {
result = num1 + num2;
} else if (operator.equals("-")) {
result = num2 - num1;
} else if (operator.equals("*")) {
result = num1 * num2;
} else if (operator.equals("/")) {
result = num2 / num1;
}
}
stack2.push(String.valueOf(result));
}
}
}
// while (!stack2.isEmpty()) {
// if (stack2.size() == 1) {
// return Integer.valueOf(stack2.pop());
// }
// int num1 = Integer.valueOf(stack2.pop());
// int num2 = Integer.valueOf(stack2.pop());
// String operator = stack2.pop();
// if (operator.equals("+")) {
// result = num1 + num2;
// } else if (operator.equals("-")) {
// result = num2 - num1;
// } else if (operator.equals("*")) {
// result = num1 * num2;
// } else if (operator.equals("/")) {
// result = num2 / num1;
// }
// }
return Integer.valueOf(stack2.pop());
}
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