在Python中执行给定堆栈操作来检查最终答案的程序

在Python中执行给定堆栈操作来检查最终答案的程序

假设我们有一个称为ops的字符串列表,其中每个元素都是以下任何一个操作之一:

  • 将要推送到堆栈中的非负整数值
  • “POP”,用于从堆栈中删除最上面的元素
  • “DUP”,将顶部元素再次插入堆栈中,使其成为副本
  • “+”,弹出最上面的两个元素并推送它们的总和
  • “-”,弹出最上面的两个元素并推送(顶部元素-正下方的元素)的结果

因此,我们必须在应用所有这些操作后找到堆栈中的最顶部的元素。如果某些操作无效,则返回-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。

要解决这个问题,我们将遵循以下步骤−

  • 堆栈:=一个新堆栈
  • 对于操作中的每个i,执行以下操作
    • 如果i是数字,则
      • 将i推入堆栈
    • 否则,当堆栈的大小≥1且i为“POP”时,然后
      • 从堆栈中弹出顶部元素
    • 否则,当堆栈的大小≥1且i与“DUP”相同时,然后
      • 将栈中最顶部的元素弹出到p中
      • 然后将p插入两次
    • 否则,当堆栈的大小≥2且i与“+”相同时,然后
      • 将堆栈中最顶部的元素弹出到a中
      • 将堆栈中最顶部的元素弹出到b中
      • 将(a + b)推入堆栈
    • 否则,当堆栈的大小≥2且i与“-”相同时,然后
      • 将堆栈中最顶部的元素弹出到a中
      • 将堆栈中最顶部的元素弹出到b中
      • 将(a-b)推入堆栈
    • 否则,
      • 返回-1
    • 从堆栈顶部返回元素

示例

让我们看一下以下实现,以获得更好的理解−

“`python 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()

<pre><code>ops = ["5", "2", "POP", "DUP", "3", "+", "15", "-"]
print(solve(ops))
</code></pre>

<pre><code class="line-numbers">## 输入
“`python [“5”, “2”, “POP”, “DUP”, “3”, “+”, “15”, “-“]“`

## 输出
“`python 7

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程