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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP