import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param tokens string字符串一维数组
* @return int整型
*/
public int evalRPN (String[] tokens) {
Stack stack = new Stack<Integer>();
int left,right;
// write code here
for(String s:tokens){
if(s.equals("+")){
right = (int)stack.pop();
left = (int)stack.pop();
stack.push(left+right);
}else if(s.equals("-")){
right = (int)stack.pop();
left = (int)stack.pop();
stack.push(left-right);
}else if(s.equals("*")){
right = (int)stack.pop();
left = (int)stack.pop();
stack.push(left*right);
}else if(s.equals("/")){
right = (int)stack.pop();
left = (int)stack.pop();
stack.push(left/right);
}else{
stack.push(Integer.valueOf(s));
}
}
return (int)stack.pop();
}
}
注意: 1.Stack的pop()返回值是Object,需要转换类型。Object与String可以互相转换,Object中还用toString();其他包装类型与String不可以互相转换,如可以将Integer变为Object,再将Object转为String,直接转换会报错。
Stack stack = new Stack<Integer>();
stack.push(4);
**Integer l = stack.pop();**//出错了,Object与Integer不匹配
Stack<String> s = new Stack<String>();
s.push("aaa");
String a = s.pop();//没错
2.逆波兰表达式即后缀表达式