As expressões matemáticas geralmente são escritas com notação infixa, em que o operador fica entre os dois operandos. A notação pós-fixa, por outro lado, coloca o operador depois dos operandos. Como usamos a precedência dos operadores para determinar a ordem dos cálculos (por exemplo, multiplicação/divisão é avaliada antes de adição/subtração), podemos mudar a posição dos operandos e eliminar a necessidade de parênteses:
2 + 5 # Infix
2 5 + # Postfix
5 + (1 + 2) * 4 - 3 # Infix
5 1 2 + 4 * + 3 - # PostfixAs expressões pós-fixas são avaliadas lendo da esquerda para a direita. Sempre que um operador é encontrado, um cálculo é realizado com os dois operandos anteriores. O processo se repete até que não haja mais cálculos a serem realizados:
2 3 4 * + 9 - # evaluate 3x4
2 12 + 9 - # evaluate 2+12
14 9 - # evaluate 14-9
5 # final answerDada uma expressão pós-fixa como uma string, retorne a expressão avaliada. Um único espaço separa cada operador/operando.
postfix("12 3 /") ➞ 4
postfix("5 3 4 * +") ➞ 17
postfix("5 3 + 4 *") ➞ 32Postfix também é conhecido como "Reverse Polish Notation". Consulte a aba de recursos para obter mais informações.