LeetCode:逆波兰表示法

题目描述(题目链接)

根据 逆波兰表示法,求表达式的值。

有效的运算符包括 +-*/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

思路

  • 创建一个新数组用来保存数字
  • 遍历数组,如果遇到数字,将其添加到新数组中
  • 如果遇到+,-,*,/,以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];
    }

}

运行结果

猜你喜欢

转载自blog.csdn.net/weixin_43939602/article/details/114324545