1. 程式人生 > 實用技巧 >【LeetCode/LintCode】 題解丨BAT大廠面試高頻題:逆波蘭表示式求值

【LeetCode/LintCode】 題解丨BAT大廠面試高頻題:逆波蘭表示式求值

求逆波蘭表示式的值。

在逆波蘭表達法中,其有效的運算子號包括 +, -, *, / 。每個運算物件可以是整數,也可以是另一個逆波蘭計數表達。

線上評測地址:點選此處前往

樣例 1:

輸入: ["2", "1", "+", "3", "*"] 
輸出: 9
解釋: ["2", "1", "+", "3", "*"] -> (2 + 1) * 3 -> 9

樣例 2:

輸入: ["4", "13", "5", "/", "+"]
輸出: 6
解釋: ["4", "13", "5", "/", "+"] -> 4 + 13 / 5 -> 6

【題解】

逆波蘭表示式是更利於計算機運算的表示式形式, 需要用到棧(先進後出的資料結構).

遍歷表示式:

  • 碰到數字則入棧
  • 碰到運算子則連續從棧中取出2個元素, 使用該運算子運算然後將結果入棧

最後棧中剩餘一個數字, 就是結果.

public class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> s = new Stack<Integer>();
        String operators = "+-*/";
        for (String token : tokens) {
            if (!operators.contains(token)) {
                s.push(Integer.valueOf(token));
                continue;
            }

            int a = s.pop();
            int b = s.pop();
            if (token.equals("+")) {
                s.push(b + a);
            } else if(token.equals("-")) {
                s.push(b - a);
            } else if(token.equals("*")) {
                s.push(b * a);
            } else {
                s.push(b / a);
            }
        }
        return s.pop();
    }
}

更多題解參見:九章演算法官網