通过在 Python 中执行给定的堆栈操作来检查最终答案的程序
假设我们有一个名为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。
示例
让我们看看以下实现以获得更好的理解-
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