https://leetcode.com/problems/evaluate-reverse-polish-notation/description/
其實題目蠻簡單的,大家應該都能寫出類似的邏輯:
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
operators = ['+', '-', '*', '/']
stack = []
for token in tokens:
if token not in operators:
stack.append(int(token))
else:
match token:
case '+':
s = stack.pop()
f = stack.pop()
stack.append(f + s)
case '-':
s = stack.pop()
f = stack.pop()
stack.append(f - s)
case '*':
s = stack.pop()
f = stack.pop()
stack.append(f * s)
case '/':
s = stack.pop()
f = stack.pop()
stack.append(int(f / s))
return stack.pop()但應該可以更善用 Python 的特性才對,請大哥幫我校對了一下:
- 可以改成
s, f = stack.pop(), stack.pop() - 可以改成用字典加
lambda來代替match
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
operators = {
'+': lambda a, b: int(a + b),
'-': lambda a, b: int(a - b),
'*': lambda a, b: int(a * b),
'/': lambda a, b: int(a / b)
}
stack = []
for token in tokens:
if token not in operators:
stack.append(int(token))
else:
s, f = stack.pop(), stack.pop()
stack.append(operators[token](f, s))
return stack.pop()好耶,是說感覺對 lambda 超級不熟的,也覺得自己對程式的理解只停留在非常非常基礎的 C 語法 …