题目链接
思路
就模拟,硬生生的模拟
1、遍历所有的入口的球
1-1 对于每个球,我们分别模拟,只有两种情况, 向左的挡板or向右的
a、向左
就看前一个是不是向左,是就可以到下一行
不是,卡住,在这儿要记得判断前一个是不是都到箱子最左边了
b、向右
就看后一个是不是也向右,事就能到下一行,接着判断
不是,卡住。在这儿要记得判断后一个是不是都到箱子最右边了
卡住自然就不用管了,要是能到下一行的就继续判断,直到最后一行都让球通过了
代码
class Solution:
def findBall(self, grid: List[List[int]]) -> List[int]:
ans=[]
m = len(grid)
n = len(grid[0])
for i in range(n):
location = i # 记录小球的列位置变化,初始自然是i
flag=1 # 一个标志位,就判断求是不是卡住了,不用这个也可以,可以先把所有小球都设置成ans=[-1]*n,然后只修改能到的就行
for j in range(m):
if grid[j][location]==-1:
if location-1<0 or grid[j][location-1]==1:
ans.append(-1)
flag = 0
break
else:
location -= 1
else:
if location+1 >=n or grid[j][location+1]==-1:
ans.append(-1)
flag = 0
break
else:
location += 1
if flag:
ans.append(location)
return ans