总结:
像这种遍历问题,尤其是二维数组的遍历
有一种常用的技巧就是创建一个辅助数组(这个辅助数组是要走的方向
放的都是定值)
上来不管三七二十一直接放入4个循环
def zhaoche(board):
#首先找到车
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j]=="R":
return i,j
def fun1(board):
'''
这个题目很长,但是思路比较简单
我现在的思路是分四次遍历
左移,右移,和上移,下移
等到溢出,碰到黑色,喷到白色就可以停止了
:param board:
:return:
'''
x,y=zhaoche(board)
i,j=x,y
sum_=0 #记录黑色的数目
while j>=0:#左移
if board[i][j]=="B":
break
elif board[i][j]=="p":
sum_+=1
break
j-=1
i,j=x,y
while j<len(board[0]):
if board[i][j]=="B":
break
elif board[i][j]=="p":
sum_+=1
break
j+=1
i,j=x,y
while i<len(board):
if board[i][j] == "B":
break
elif board[i][j] == "p":
sum_ += 1
break
i += 1
i, j = x, y
while i >=0:
if board[i][j] == "B":
break
elif board[i][j] == "p":
sum_ += 1
break
i -= 1
return sum_
技巧
def fun2(board):
'''
上面的代码很好理解,四个for循环
那么我能不能化简一下代码?
往上走就是一个(不断加1,不变)
往左走就是一个(不变,不断减1)
所以就有了这么一个数组
nums=[[1,0,-1,0]
[0,-1,0,1]]
这样第几个循环(i为几)就可以确定移动方向
:param board:
:return:
'''
i, j = zhaoche(board)
nums1 = [1, 0, -1, 0]
nums2 = [0, -1, 0, 1]
sum_ = 0
for z in range(4):
step = 0
while True:
x = i + step * nums1[z]
y = j + step * nums2[z]
if x >= 0 and x < len(board) and y >= 0 and y < len(board[0]):
if board[x][y] == "B":
break
elif board[x][y] == "p":
sum_ += 1
break
else:
break
step += 1
return sum_