题目描述(题目链接)
根据 逆波兰表示法,求表达式的值。
有效的运算符包括 +
, -
, *
, /
。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
思路
- 创建一个新数组用来保存数字
- 遍历数组,如果遇到数字,将其添加到新数组中
- 如果遇到+,-,*,/,以a+b=c为例,新数组中保存的最后一个数字相当于b,前一个数字相当于a,将a和b进行相应的计算,计算结果保存在前一个数字中(注意此时新数组中的元素应少一个)
- 最终的结果返回新数组中的第一个元素即可
代码
class Solution{
public static void main(String[] args) {
String[] tokens={"10","6","9","3","+","-11", "*", "/", "*", "17", "+", "5", "+"};
System.out.println(evalRPN(tokens));
}
public static int evalRPN(String[] tokens) {
//我学到的好办法
//刚开始忘记加break,导致一些错误
//思路:创建一个数组用来保存数字,当遇到运算符号时,进行计算,并且更新数组
int[] arr=new int[tokens.length/2+1];
int i=0;
for(String token:tokens){
switch(token){
case "+":
arr[i-2]+=arr[i-1];
i--;
break;
case "-":
arr[i-2]-=arr[i-1];
i--;
break;
case "*":
arr[i-2]*=arr[i-1];
i--;
break;
case "/":
arr[i-2]/=arr[i-1];
i--;
break;
default:
arr[i++]=Integer.parseInt(token);
break;
}
}
return arr[0];
}
}
运行结果