classSolution:defvalidateStackSequences(self, pushed: List[int], popped: List[int])->bool:
res =[]
i =0for ele in pushed:
res.append(ele)while res and res[-1]== popped[i]:
res.pop()
i+=1returnnot res
剑指offer 30 包含min函数的栈
classMinStack:def__init__(self):"""
initialize your data structure here.
"""
self.A , self.B =[],[]defpush(self, x:int)->None:
self.A.append(x)ifnot self.B or self.B[-1]>=x:
self.B.append(x)defpop(self)->None:if self.A.pop()== self.B[-1]:
self.B.pop()deftop(self)->int:return self.A[-1]if self.A elseNonedefmin(self)->int:# 直接用了min函数,不好!应该自己写一个辅助栈,保存最小值。所以有两个list,第二个用于保存min。return self.B[-1]
剑指offer 29 顺时针打印矩阵
classSolution:defspiralOrder(self, matrix: List[List[int]])-> List[int]:# python可以将第一行加入res,剩下的旋转,再选取第一行加入res,如此。
res =[]while matrix:
res += matrix.pop(0)
matrix =list(zip(*matrix))[::-1]# list(zip(*matric))是矩阵每列为一个元素return res
剑指offer 25 合并两个序列的链表
classSolution:defmergeTwoLists(self, l1: ListNode, l2: ListNode)-> ListNode:# 用0新建一个链表,用cur移动构建链表,返回res.next得到完整链表# 思路:不断将小的结点进行拼接,直至一个为null,将另一个拼接在后面
res = cur = ListNode(0)while l1 and l2:if l1.val >= l2.val:
cur.next= l2
l2 = l2.nextelse:
cur.next= l1
l1 = l1.next
cur = cur.next
cur.next= l1 if l1 else l2
return res.next