剑指 Offer 13. 机器人的运动范围
BFS
首先将起点加入队列 ,其次四个方向依次判断 若改位置在棋盘 且之前没被访问,且满足k的条件 那么将其加入队列
最后入队的格子数目
class Solution:
def movingCount(self, m: int, n: int, k: int) -> int:
lis =[(0,0)]
res = 1
mov = [(1,0),(0,1),(-1,0),(0,-1)]
rdict = defaultdict(int)
rdict[(0,0)] +=1
while lis:
i,j = lis.pop(0)
for x,y in mov:
newi,newj =i+x,j+y
if 0 <= newi <m and 0<= newj<n and not rdict[(newi,newj)]:
if newi%10 +newj%10 +newi//10 +newj//10 <=k:
lis.append((newi,newj))
rdict[(newi,newj)] +=1
res +=1
return res
860. 柠檬水找零
贪心
记录当前的 10元和5元张数,若碰见20元顾客 优先找10元+5元 其次找三张5元 ,对于10元顾客直接找5元 若找零后张数为负 则返回False ,否则返回True
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
num = 0
ano = 0
for i in bills:
if i == 5 :
num += 1
elif i ==10:
num -= 1
ano +=1
else :
if ano>0:
ano-=1
num -=1
else:
num -= 3
if num<0 or ano <0:
return False
return True