看起来像是考察DFS或者BFS的题目,但是分析可知,能kill King的只有King为中心的“米”字 8个方向上遇到的第一个Queen。
class Solution:
def queensAttacktheKing(self, queens: List[List[int]], king: List[int]) -> List[List[int]]:
Row = Col = 8
res = []
def goup(king):
for r in range(king[0], -1, -1):
if [r, king[1]] in queens:
res.append([r, king[1]] )
break
goup(king)
def godown(king):
for r in range(king[0], 8):
if [r, king[1]] in queens:
res.append([r, king[1]] )
break
godown(king)
def goleft(king):
for c in range(king[1], -1, -1):
if [king[0], c] in queens:
res.append([king[0], c])
break
goleft(king)
def goright(king):
for c in range(king[1], 8):
if [king[0], c] in queens:
res.append([king[0], c])
break
goright(king)
def goupleft(king):
i = king[0]
j = king[1]
while i >= 0 and j >= 0:
if [i,j] in queens:
res.append([i,j])
break
i -= 1
j -= 1
goupleft(king)
def goupright(king):
i = king[0]
j = king[1]
while i >= 0 and j < 8:
if [i,j] in queens:
res.append([i,j])
break
i -= 1
j += 1
goupright(king)
def godownleft(king):
i = king[0]
j = king[1]
while i < 8 and j >= 0:
if [i,j] in queens:
res.append([i,j])
break
i += 1
j -= 1
godownleft(king)
def godowmright(king):
i = king[0]
j = king[1]
while i < 8 and j < 8:
if [i,j] in queens:
res.append([i,j])
break
i += 1
j += 1
godowmright(king)
return res