1. 程式人生 > 其它 >150. 逆波蘭表示式求值

150. 逆波蘭表示式求值

import java.util.Stack;

class Solution {
    public int evalRPN(String[] tokens) {

        /**
         * 逆波蘭表示式
         * 遇到數字壓入棧,遇到算符就彈出最後兩個數進行計算,將結果再壓入棧
         * 最後剩下一個數字,就是最終結果
         */
        Stack<Integer> stack = new Stack<>();

        for (int i = 0; i < tokens.length; i++) {

            String string = tokens[i];

            /**
             * 比較兩個字串是否相等,需要用equals()方法
             */
            if (string.equals("+")){

                int num2 = stack.pop();
                int num1 = stack.pop();
                stack.push(num1 + num2);
            }
            else if (string.equals("-")){

                int num2 = stack.pop();
                int num1 = stack.pop();
                stack.push(num1 - num2);
            }
            else if (string.equals("*")){

                int num2 = stack.pop();
                int num1 = stack.pop();
                stack.push(num1 * num2);
            }
            else if (string.equals("/")){

                int num2 = stack.pop();
                int num1 = stack.pop();
                stack.push(num1 / num2);
            }
            else {

                /**
                 * Integer.parseInt()方法將字串轉換為整形
                 */
                stack.push(Integer.parseInt(string));
            }
        }

        return stack.pop();
    }
}

/**
 * 時間複雜度 O(n)
 * 空間複雜度 O(n)
 */