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