Problem 150

Posted by Ruizhi Ma on October 22, 2020

Solution URL

https://leetcode.com/submissions/detail/412013996/

代码

class Solution {
    public int evalRPN(String[] tokens) {
        //Time: O(n)
        //Space: O(n)
        Stack<Integer> s = new Stack<>();
        List<String> l = Arrays.asList("+", "-", "*", "/");

        for(int i = 0; i < tokens.length; i++){
            //遍历数组,如果是操作符,就从栈中弹出两个元素进行操作
            if(l.contains(tokens[i])){//如果是操作符
                //弹出两个数
                int num1 = s.pop();
                int num2 = s.pop();
                //存储运算的结果
                int temp = 0;

                //根据操作符做相应的运算
                switch(tokens[i])
                {
                    //it must be num2 first then comes num1!!!
                    case "+":
                        temp = num2 + num1;
                        break;
                    case "-":
                        temp = num2 - num1;
                        break;
                    case "*":
                        temp = num2 * num1;
                        break;
                    case "/":
                        temp = num2 / num1;
                        break;
                }
                //将运算的结果存入stack
                s.push(temp);

            }else{//如果是数字
                //若为数字,则压入栈内
                s.push(Integer.parseInt(tokens[i]));
            }
        }

        return s.pop();


    }
}