题目描述
结题思路主要还是利用堆栈的特性.
洗碗工洗好的盘子摆放起来明显是一个堆栈. 我们用堆栈的出站入站来模拟洗盘子取盘子的过程.根据是否出现矛盾,进行判断.
从此处入手分析可知:
start 初始为0
首先我们假设洗碗工是按照要求顺序洗盘子的,因此可以将客户取到的盘子分为三种情况:
- 堆栈为空或者盘子号大于栈顶元素,将从start到取到的盘子号的盘子都push进堆栈,然后弹出。(因此只用压到盘子号-1的元素就好了,省了弹出)
- 取到的盘子号等于栈顶元素,将栈顶元素弹出
- 取到的盘子号小于栈顶元素。矛盾,说明没有按照顺序洗盘子,所以返回No.
具体代码如下:
class Stack():
def __init__(self, limit=10):
self.stack = []
self.limit = limit
def pop(self):
if self.stack:
return self.stack.pop()
else:
raise IndexError('pop from an empty stack') # 空栈不能被弹出
def push(self,x):
if len(self.stack)<self.limit:
self.stack.append(x)
else:
pri