Menu
CoddyTech

Evaluate Reverse Polish Notation

Trung bìnhNgăn xếppython iconjava iconcpp iconc iconjs icon+10

Bạn nhận được một biểu thức số học ở dạng ký pháp Ba Lan ngược, dưới dạng một mảng (array) các token. Mỗi toán tử đứng ngay sau hai toán hạng của nó, vì vậy 3 4 + có nghĩa là 3 + 4 và 3 4 + 2 * có nghĩa là (3 + 4) * 2, không cần dấu ngoặc đơn. Mỗi token là một số nguyên hoặc một trong các toán tử +, -, * và /.

Trả về giá trị của biểu thức. Phép chia cắt phần thập phân về phía 0: 7 / 2 là 3 và -7 / 2 là -3.

Hàm

evalRPN(tokens: string-array) → integer
tokensstring-array
các số và toán tử của biểu thức, theo thứ tự
Trả vềinteger
giá trị của biểu thức

Ràng buộc

  • 1 ≤ tokens.length ≤ 104
  • Mỗi token là +, -, *, / hoặc một số nguyên từ -200 đến 200 được viết ở dạng thập phân, có dấu trừ ở đầu nếu là số âm.
  • tokens là một biểu thức theo ký pháp Ba Lan ngược (reverse Polish notation) hợp lệ.
  • Không xảy ra phép chia cho 0, và mọi giá trị trung gian cũng như giá trị cuối cùng đều lớn hơn -231 và nhỏ hơn 231.

Ví dụ

Đầu vào
tokens = ["8", "3", "-", "4", "*"]
Đầu ra
20
Giải thích
Phép trừ - áp dụng lần lượt cho 8 rồi đến 3, nên cho kết quả là 5, không phải -5. Sau đó, phép nhân * nhân 5 với 4, cho kết quả là 20.
challenge icon

Câu hỏi mở rộng

Bạn có thể viết lại biểu thức bằng ký hiệu thông thường, chẳng hạn như (3 + 4) * 2, chỉ thêm dấu ngoặc đơn ở những chỗ làm thay đổi ý nghĩa không?

Đặt lại code
def evalRPN(tokens):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

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

Đầu ra mong đợi

20