mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
56 lines
1.6 KiB
Plaintext
56 lines
1.6 KiB
Plaintext
---
|
|
title: '150. Evaluate Reverse Polish Notation'
|
|
description: You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation
|
|
sidebar:
|
|
label: 'Evaluate Reverse Polish Notation'
|
|
badge: 'Medium'
|
|
---
|
|
|
|
<Badge variant="accent">Stack</Badge>
|
|
|
|
### 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`
|
|
|
|
### Example 3:
|
|
- Input: `tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]`
|
|
- Output: `22`
|
|
- Explanation: `((10 * (6 / ((9 + 3`) * `-11`))) + `17`) + `5 = ((10 * (6 / (12 * -11`))) + `17`) + `5 = ((10 * (6 / -132`)) + `17`) + `5 = ((10 * 0`) + `17`) + `5 = (0 + 17`) + `5 = 17 + 5 = 22`
|
|
|
|
### Constraints:
|
|
|
|
- `1 <= tokens.length <= 10^4`
|
|
- `tokens[i]` is either an operator: "+", "-", "*", or "/", or an integer in the range [-200, 200].
|
|
|
|
## Solution
|
|
|
|
```py
|
|
class Solution:
|
|
def evalRPN(self, tokens: List[str]) -> int:
|
|
stack = []
|
|
operations = {
|
|
"+": lambda x, y: int(x + y),
|
|
"-": lambda x, y: int(x - y),
|
|
"*": lambda x, y: int(x * y),
|
|
"/": lambda x, y: int(x / y),
|
|
}
|
|
|
|
for c in tokens:
|
|
if c in operations:
|
|
y = stack.pop()
|
|
x = stack.pop()
|
|
calc_func = operations[c]
|
|
result = calc_func(x, y)
|
|
stack.append(result)
|
|
else:
|
|
stack.append(int(c))
|
|
|
|
return stack[0]
|
|
```
|