Python程式:透過執行給定的棧操作檢查最終答案
假設我們有一個名為 ops 的字串列表,其中每個元素都是以下操作之一:
- 一個非負整數,將被壓入棧中。
- "POP" 用於刪除棧頂元素。
- "DUP" 用於將棧頂元素再次插入棧中,使其複製。
- "+" 用於彈出棧頂兩個元素並壓入它們的和。
- "-" 用於彈出棧頂兩個元素並壓入結果(棧頂元素減去其下方元素)。
因此,我們需要找到應用所有這些操作後棧頂的元素。如果某些操作無效,則返回 -1。
例如,如果輸入為 ops = ["5", "2", "POP", "DUP", "3", "+", "15", "-"],則輸出將為 7,因為最初使用前兩個操作,插入 5 和 2,所以棧為 [5, 2],然後彈出 1 個,所以當前棧為 [5]。之後對於 DUP,5 將被複制,所以棧為 [5, 5],然後新增 3 [5, 5, 3],然後對於加法操作,它將變為 [5, 8],然後插入 15,所以 [5, 8, 15],然後對於減法操作,棧將變為 [5, (15-8)] = [5, 7]。因此,棧頂元素為 7。
為了解決這個問題,我們將遵循以下步驟:
- stack := 一個新的棧
- 對於 ops 中的每個 i,執行:
- 如果 i 是一個數字,則:
- 將 i 壓入棧中。
- 否則,當棧的大小 >= 1 且 i 等於 "POP" 時,則:
- 從棧中彈出棧頂元素。
- 否則,當棧的大小 >= 1 且 i 等於 "DUP" 時,則:
- 從棧中彈出棧頂元素到 p。
- 並將 p 插入兩次。
- 否則,當棧的大小 >= 2 且 i 等於 "+" 時,則:
- 從棧中彈出棧頂元素到 a。
- 從棧中彈出棧頂元素到 b。
- 將 (a + b) 壓入棧中。
- 否則,當棧的大小 >= 2 且 i 等於 "-" 時,則:
- 從棧中彈出棧頂元素到 a。
- 從棧中彈出棧頂元素到 b。
- 將 (a - b) 壓入棧中。
- 否則:
- 返回 -1。
- 如果 i 是一個數字,則:
- 返回棧頂元素。
示例
讓我們看下面的實現以更好地理解:
def solve(ops): stack = [] for i in ops: if i.isnumeric() == True: stack.append(int(i)) elif len(stack) >= 1 and i == "POP": stack.pop() elif len(stack) >= 1 and i == "DUP": p = stack.pop() stack.append(p) stack.append(p) elif len(stack) >= 2 and i == "+": a = stack.pop() b = stack.pop() stack.append(a + b) elif len(stack) >= 2 and i == "-": a = stack.pop() b = stack.pop() stack.append(a - b) else: return -1 return stack.pop() ops = ["5", "2", "POP", "DUP", "3", "+", "15", "-"] print(solve(ops))
輸入
["5", "2", "POP", "DUP", "3", "+", "15", "-"]
輸出
7
廣告