原题链接:https://oj.leetcode.com/problems/evaluate-reverse-polish-notation/
这题简单。基本一次过。注意pop 出stack的时候,先pop出来的是operand2, 后出来的是operand1 (因为是operand1先进栈)
public class Solution {
public int evalRPN(String[] tokens) {
Stack<String> stack = new Stack<String>();
for(int i = 0; i < tokens.length; i++){
String token = tokens[i];
if(isOperator(token)){
int result = 0;
int operand1 = 0;
int operand2 = 0;
if(!stack.isEmpty()){
operand2 = Integer.parseInt(stack.pop());
operand1 = Integer.parseInt(stack.pop());
}
if(token.equals("+")){
result = operand1 + operand2;
}
if(token.equals("-")){
result = operand1 - operand2;
}
if(token.equals("*")){
result = operand1 * operand2;
}
if(token.equals("/")){
result = operand1 / operand2;
}
stack.push(Integer.toString(result));
}
else{
stack.push(token);
}
}
return Integer.parseInt(stack.peek());
}
private boolean isOperator (String token) {
if(token.equals("+")|| token.equals("-") || token.equals("*") || token.equals("/")){
return true;
}
else return false;
}
}
Note: 11.4.2014
没有一次过。注意要判断isOperator, 而不是isNumber