LeetCode#150 逆波兰表达式

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

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

说明:

整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

示例 1:

输入: [“2”, “1”, “+”, “3”, “*”]
输出: 9
解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
示例 2:

输入: [“4”, “13”, “5”, “/”, “+”]
输出: 6
解释: 该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

方法一:数组代替栈
·数组最大长度为tokens.length / 2 + 1
·switch代替if-else,效率优化
·Integer.parseInt代替Integer.valueOf,减少自动拆箱装箱操作

class Solution {
    public int evalRPN(String[] tokens) {
       int[] stack = new int[tokens.length/2+1];
       int index = 0;
       for(String s : tokens){
           switch(s){
               case("+"):stack[index-2] += stack[--index];break;
               case("-"):stack[index-2] -= stack[--index];break;
               case("*"):stack[index-2] *= stack[--index];break;
               case("/"):stack[index-2] /= stack[--index];break;
               default:stack[index++] = Integer.parseInt(s);break;
           }
       }
       return stack[0];
    }
}

方法二:栈

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        Integer pop1,pop2;
        for(String s : tokens){
            switch(s){
               case("+"):pop1 = stack.pop();
                         pop2 = stack.pop();
                         stack.push(pop2 + pop1);
                         break;
               case("-"):pop1 = stack.pop();
                         pop2 = stack.pop();
                         stack.push(pop2 - pop1);
                         break;
               case("*"):pop1 = stack.pop();
                         pop2 = stack.pop();
                         stack.push(pop2 * pop1);
                         break;
               case("/"):pop1 = stack.pop();
                         pop2 = stack.pop();
                         stack.push(pop2 / pop1);
                         break;
               default:  stack.push(Integer.valueOf(s));
                         break;
            }
        }
        return stack.pop();
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页