150. 逆波蘭表示式求值
阿新 • • 發佈:2021-12-20
棧
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) */