赞
踩
小模拟
最终的位置只需要考虑列坐标,右挡板会使小球列坐标+1,左挡板会使小球列坐标-1。列坐标为0代表小球现在位于第零列上,所列坐标小于0或超出最大范围说明小球被挡住。
小球终止即最后输出值为-1的情况有三种
其他的情况小球都会继续下滑
关于代码中为啥使用for\else而不是if\else
for\else如果代码没有在for循环内break,则最后运行else语句,因为我们需要计算最后小球落下的位置,所以需要小球能够落到最低部,即不会被break掉。
第二,将else移到里面if下对于能够落到最低部的小球来说逻辑没有任何问题,但对于落不到底部的小球,则会让小球位置记录为先前能够下到最后一个位置的列坐标,结果就不是-1了,如果使用if\else的话需要将代码改为
if col < 0 or col > n - 1 or row[col] != dir:
ans[j] = -1
break
else:
ans[j] = col
def findBall(self, grid: List[List[int]]) -> List[int]:
n = len(grid[0])
result = [-1] * n
for j in range(n):
position = j
for row in grid:
dir = row[position]
position += dir
# 若碰到左边墙,右边墙,v字形
if position < 0 or position > n - 1 or row[position] != dir:
break
else:
result[j] = position
return result
def findBall(self, grid: List[List[int]]) -> List[int]:
n = len(grid[0])
result = [-1] * n
for j in range(n):
position = j
for row in grid:
dir = row[position]
position += dir
# 若碰到左边墙,右边墙,v字形
if col < 0 or col > n - 1 or row[col] != dir:
ans[j] = -1
break
else:
ans[j] = col
return result
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。