题目描述:
思路:将数字元素依次压入栈中,当遇到运算符时,出栈栈顶的两个元素做运算把结果压入到栈中,重复此过程,最后栈顶的那个元素即为结果。
代码如下:
public int evalRPN(String[] tokens) {
Stack<String> stack = new Stack<String>();
List<String> ls = new ArrayList<String>();
ls.add("+");ls.add("-");ls.add("*");ls.add("/");
int i = 0;
int result = 0;
while(i<tokens.length){
if(ls.contains(tokens[i])){
if(stack.isEmpty()){
return -1;
}
int val1 = Integer.parseInt(stack.pop());
if(stack.isEmpty()){
return -1;
}
int val2 = Integer.parseInt(stack.pop());
int newValue = 0;
if(tokens[i].equals("+")){
newValue = val1+val2;
}
else if(tokens[i].equals("-")){
newValue = val2-val1;
}
else if(tokens[i].equals("*")){
newValue = val1*val2;
}
else{
newValue = val2/val1;
}
stack.push(Integer.toString(newValue));
}
else{
stack.push(tokens[i]);
}
i++;
}
return Integer.parseInt(stack.pop());
}