import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @param tokens string字符串一维数组 * @return int整型 */ public int evalRPN (String[] tokens) { //tokens是字符数组 /** *思路:逆波兰表达式又称后缀表达式 *先新建一个栈,当遇到数字时,直接压入栈中 *遇到运算符时,先取出栈顶的两个数字,进行相应运算, *再压回栈中。最后栈中剩下的那个元素即是表达式的值。 */ Stack<Integer> stk=new Stack<Integer>(); //新建一个栈 if(tokens.length==0 ||tokens==null) return 0; int t1=0,t2=0; //t1用来暂时存放计算的值 for(int i=0 ; i<tokens.length ;i++){ if(tokens[i].equals("+")){ t1=stk.pop()+stk.pop(); //加 stk.push(t1); //出栈 }else if(tokens[i].equals("-")){ t1=-(stk.pop()-stk.pop()); //t1是暂存的本次的中间运算结果,因为最后执行的是加法,当前的操作是减,对于最终结果的效果的负,所以前面要加一个负号 stk.push(t1); //出栈 }else if(tokens[i].equals("*")){ t1=stk.pop()*stk.pop(); //乘 stk.push(t1); //出栈 }else if(tokens[i].equals("/")){ t1=stk.pop(); t2=stk.pop(); t1=t2/t1; stk.push(t1); }else{ stk.push(Integer.parseInt(tokens[i])); } } return stk.pop(); } }
本题总结
1、“==”比较两个变量本身的值,即两个对象在内存中的首地址。
2、“equals()”比较字符串中所包含的内容是否相同。
3、如果只是想看看栈顶是个什么玩意不想删除就用stk.peek();
若想要删除栈顶元素就用stk.pop();
参考链接