Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình kiểm tra kết quả cuối cùng sau các thao tác stack Python

Cho danh sách ops các thao tác stack: số (push), "POP", "DUP" (nhân đôi đỉnh), "+" (cộng 2 đỉnh), "-" (trừ đỉnh - đỉnh dưới). Trả về phần tử đỉnh cuối cùng, hoặc -1 nếu thao tác không hợp lệ.

Ví dụ: ops=["5","2","POP","DUP","3","+","15","-"] → 7.

Giải thuật (Mô phỏng stack)

  1. Duyệt từng thao tác:
    • Số → push
    • POP: pop nếu stack không rỗng
    • DUP: pop đỉnh p, push p hai lần
    • +: pop a,b, push a+b
    • -: pop a,b, push a-b
    • Khác → trả về -1
  2. Trả về đỉnh stack

Ví dụ triển khai

def solve(ops):
    stack = []
    for op in ops:
        if op.isnumeric():
            stack.append(int(op))
        elif len(stack) >= 1 and op == "POP":
            stack.pop()
        elif len(stack) >= 1 and op == "DUP":
            p = stack.pop()
            stack.append(p)
            stack.append(p)
        elif len(stack) >= 2 and op == "+":
            a = stack.pop()
            b = stack.pop()
            stack.append(a + b)
        elif len(stack) >= 2 and op == "-":
            a = stack.pop()
            b = stack.pop()
            stack.append(a - b)
        else:
            return -1
    return stack.pop() if stack else -1

print(solve(["5", "2", "POP", "DUP", "3", "+", "15", "-"]))

Đầu vào

["5", "2", "POP", "DUP", "3", "+", "15", "-"]

Đầu ra

7