【LeetCode/LintCode】 題解丨BAT大廠面試高頻題:逆波蘭表示式求值
阿新 • • 發佈:2020-08-14
求逆波蘭表示式的值。
在逆波蘭表達法中,其有效的運算子號包括 +, -, *, / 。每個運算物件可以是整數,也可以是另一個逆波蘭計數表達。
線上評測地址:點選此處前往
樣例 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(); } }
更多題解參見:九章演算法官網