作者JerryChungYC (JerryChung)
看板Marginalman
標題Re: [閒聊] 每日LeetCode
時間Tue Jan 30 20:14:24 2024
https://leetcode.com/problems/evaluate-reverse-polish-notation
150. Evaluate Reverse Polish Notation
回傳逆波蘭表示法的結果值
有效運算子為 "+" "-" "*" "/"
每個操作數會是整數或是另一個表達式
兩個整數之間的除法是向零截斷
不會有被零除的情況
答案和中間計算都可以用32位元整數表示
Example 1:
Input: tokens = ["2","1","+","3","*"]
Output: 9
Explanation: ((2 + 1) * 3) = 9
Example 2:
Input: tokens = ["4","13","5","/","+"]
Output: 6
Explanation: (4 + (13 / 5)) = 6
看了一下維基 就是遇到數字 -> 存起來
遇到運算 -> 取最後2個數來計算
Python3 code:
------------------------------------------------------
class Solution:
def ops(op, b, a):
match op:
case "+":
return a + b
case "-":
return a - b
case "*":
return a * b
case "/":
return int(a / b)
def evalRPN(self, tokens: List[str]) -> int:
lst = []
for token in tokens:
if token.lstrip("-").isdigit():
lst.append(int(token))
else:
lst.append(self.ops(token, lst.pop(), lst.pop()))
return lst[0]
------------------------------------------------------
首先判斷是否是數字 有負號所以用 lstrip 把負號移掉來判斷
查了一下 有 operator 可以用 不過這邊還是自己做運算
因為沒有另外用變數存lst.pop() 所以要注意放入ops時的順序
向零截斷的關係 用 int(a / b) 而不是 a // b
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.129.82.227 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1706616867.A.727.html
→ JerryChungYC: 啊 打字打太久 還先洗了個碗 01/30 20:15
→ JerryChungYC: 反過來用 if token in ["+", "-", "*", "/"] 也可以 01/30 20:18