leetcode/lintcode/271-prefix-notation-to-postfix-notation/python3/solution.py

50 lines
1.3 KiB
Python

from typing import (
List,
)
from collections import deque
class Solution:
"""
@param expression: A string array
@return: The Reverse Polish notation of this expression
"""
def convert_to_r_p_n(self, expression: List[str]) -> List[str]:
op_priority = {
'/': 1 << 4,
'*': 1 << 4,
'+': 1 << 2,
'-': 1 << 2,
'(': 1 << 0
}
op_stack = deque()
result = []
for token in expression:
if token.isdigit():
result.append(token)
elif token == '(':
op_stack.append(token)
elif token == ')':
while len(op_stack) > 0 and op_stack[-1] != '(':
result.append(op_stack.pop())
op_stack.pop()
else:
# For any other operator, keep popping and appending to results as long as there
# are higher priority operators in the stack
while len(op_stack) > 0 and op_priority[op_stack[-1]] >= op_priority[token]:
result.append(op_stack.pop())
op_stack.append(token)
# Pop and append the remaining operators in the stack
while len(op_stack) > 0:
result.append(op_stack.pop())
return result