通过在 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