1.最小栈:

解法:栈里存的都是二元组( x,y)x是当前存入栈的元素,y是当前栈最小元素,这样既可以O(1)弹出当前元素,也可以O(1)弹出栈内最小元素
class MinStack:
def __init__(self):
self.st = [(0,inf)]
def push(self,val:int)->None:
self.st.append((val,min(val,self.st[-1][1])))
def pop(self):
self.st.pop()
def top(self)->int:
return self.st[-1][0]
def getMin(self)->int:
return self.st[-1][1]
2.字符串解码

核心思路:遇到[ 就进入递归,遇到]就break结束这层递归,递归前遇到数字记录下来k,技巧k = k*10+int(c)
class Solution:
def decodeString(self, s: str) -> str:
i = 0
def decode():
nonlocal i
res = []
k = 0
while i<len(s):
c = s[i]
i += 1
if c.isalpha():
res.append(c)
elif c.isdigit():
k = k*10+int(c)
elif c=='[':
res.append(decode()*k)
k = 0
else:
break
return ''.join(res)
return decode()
黑马点评从头看了一遍笔记,回顾了一下,准备开始新阶段了兄弟们