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。
  • 返回栈顶元素。

示例

让我们看下面的实现以更好地理解:

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

更新于: 2021-10-14

736 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.