Обратная польская нотация

средне
# решено

Дан массив строк tokens, представляющий выражение в обратной польской нотации. Каждый элемент массива — это либо число, либо один из операторов: +, -, *, /. Нужно вернуть результат вычисления выражения. Гарантируется, что деления на ноль не будет.

Алгоритм вычисления:

  • Числа добавляются в стек.
  • При встрече оператора извлекаются два последних числа из стека, выполняется операция, и результат помещается обратно в стек.
  • После завершения вычислений в стеке остаётся одно число — результат.

Например, для выражения ["100", "5", "/", "10", "+"] вычисления будут выглядеть так: (100 / 5) + 10 = 30.

Пример 1:

Ввод: tokens = ["100","5","/","10","+"]
Вывод: 30
Объяснение: после первой операции массив станет [“20”, “10”, “+”], а после второй — [“30”]

Пример 2:

Ввод: tokens = ["10","12","8","-","*"]
Вывод: 40
Объяснение: то же самое, что и (12-8)*10

Пример 3:

Ввод: tokens = ["10"]
Вывод: 10

Ограничения:

  • len(tokens) >= 1