Menu
CoddyTech

Evaluate Reverse Polish Notation

СреднеСтекpython iconjava iconcpp iconc iconjs icon+10

Дано арифметическое выражение в обратной польской записи в виде массива токенов. В этой записи каждый оператор стоит сразу после двух операндов, поэтому 3 4 + означает 3 + 4, а 3 4 + 2 * означает (3 + 4) * 2; скобки не нужны. Каждый токен — это целое число или один из операторов +, -, * и /.

Вычислите выражение и верните его значение. При делении сохраняется только целая часть, а округление выполняется в сторону нуля: 7 / 2 — это 3, а -7 / 2 — это -3.

Функция

evalRPN(tokens: string-array) → integer
tokensstring-array
числа и операторы выражения в порядке их следования
Возвращаетinteger
значение выражения

Ограничения

  • 1 ≤ tokens.length ≤ 104
  • Каждый токен — это +, -, *, / или целое число от -200 до 200, записанное в десятичной системе счисления, с минусом в начале, если оно отрицательное.
  • tokens — допустимое выражение в обратной польской нотации.
  • Деления на ноль не происходит, и каждое промежуточное и итоговое значение больше -231 и меньше 231.

Примеры

Ввод
tokens = ["8", "3", "-", "4", "*"]
Вывод
20
Пояснение
- применяется к двум числам перед ним в их порядке: 8, затем 3, поэтому результат — 5, а не -5. Затем * умножает это 5 на 4, в результате получается 20.

lock icon+18 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Можешь ли ты восстановить выражение в обычной записи, например (3 + 4) * 2, добавляя скобки только там, где они меняют смысл?

Сбросить код
def evalRPN(tokens):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

tokens = ["8", "3", "-", "4", "*"]

Ожидается

20