通过执行给定的堆栈操作来检查最终答案的程序(Python 中)
pythonserver side programmingprogramming更新于 2026/1/5 20:28:17
假设我们有一个名为 ops 的字符串列表,其中每个元素都是以下任何一种操作(如下所示 −
- 将被推送到堆栈中的非负整数值
- "POP" 从堆栈中删除最顶部的元素
- "DUP" 将顶部元素再次插入堆栈,使其重复
- "+" 弹出顶部两个元素并推送总和值
- "-" 弹出顶部两个元素并推送(顶部元素 - 顶部正下方的元素)的结果
因此,我们必须在应用所有这些操作后找到堆栈中的顶部 mot 元素。如果某些操作无效,则返回 -1。
因此,如果输入类似 ops = ["5", "2", "POP", "DUP", "3", "+", "15", "-"],则输出将为 7,因为最初使用前两个操作,插入 5 和 2,因此堆栈类似于 [5, 2],然后弹出一个,因此当前堆栈类似于 [5]。之后对于 DUP,5 将被复制,因此堆栈类似于 [5, 5],然后添加 3 [5, 5, 3],然后对于加法运算它将是 [5, 8],然后插入 15,因此 [5, 8, 15],之后对于减法运算,堆栈将是 [5, (15-8)] = [5, 7]。因此最顶部元素是 7。
要解决这个问题,我们将遵循以下步骤 −
- 堆栈 := 一个新堆栈
- 对于 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

