目录

1222:可以攻击国王的皇后(1391 分)

力扣第 158 场周赛第 2 题

题目

在一个 下标从 0 开始8 x 8 棋盘上,可能有多个黑皇后和一个白国王。

给你一个二维整数数组 queens,其中 queens[i] = [xQueeni, yQueeni] 表示第 i 个黑皇后在棋盘上的位置。还给你一个长度为 2 的整数数组 king,其中 king = [xKing, yKing] 表示白国王的位置。

返回 能够直接攻击国王的黑皇后的坐标。你可以以 任何顺序 返回答案。

示例 1:

输入:queens = [[0,1],[1,0],[4,0],[0,4],[3,3],[2,4]], king = [0,0]
输出:[[0,1],[1,0],[3,3]]
解释:上面的图示显示了三个可以直接攻击国王的皇后和三个不能攻击国王的皇后(用红色虚线标记)。

示例 2:

输入:queens = [[0,0],[1,1],[2,2],[3,4],[3,5],[4,4],[4,5]], king = [3,3]
输出:[[2,2],[3,4],[4,4]]
解释:上面的图示显示了三个能够直接攻击国王的黑皇后和三个不能攻击国王的黑皇后(用红色虚线标记)。

提示:

  • 1 <= queens.length < 64
  • queens[i].length == king.length == 2
  • 0 <= xQueeni, yQueeni, xKing, yKing < 8
  • 所有给定的位置都是 唯一 的。

分析

从国王出发往8个方向找皇后即可。

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def queensAttacktheKing(self, queens: List[List[int]], king: List[int]) -> List[List[int]]:
	res, vis = [], {(a,b) for a,b in queens}
	for dx, dy in [(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]:
		x, y = king
		while 0<=x<8 and 0<=y<8:
			x, y = x+dx, y+dy
			if (x, y) in vis:
				res.append([x,y])
				break
	return res

32 ms