通过执行给定的堆栈操作来检查最终答案的程序(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
  • 从堆栈中返回顶部元素

示例

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

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

相关文章


有用资源