【leetcode】1222. Queens That Can Attack the King

╄→гoц情女王★ 提交于 2019-12-01 11:50:26

题目如下:

On an 8x8 chessboard, there can be multiple Black Queens and one White King.

Given an array of integer coordinates queens that represents the positions of the Black Queens, and a pair of coordinates king that represent the position of the White King, return the coordinates of all the queens (in any order) that can attack the King.

 

Example 1:

Input: queens = [[0,1],[1,0],[4,0],[0,4],[3,3],[2,4]], king = [0,0]  Output: [[0,1],[1,0],[3,3]]  Explanation:    The queen at [0,1] can attack the king cause they're in the same row.   The queen at [1,0] can attack the king cause they're in the same column.   The queen at [3,3] can attack the king cause they're in the same diagnal.   The queen at [0,4] can't attack the king cause it's blocked by the queen at [0,1].   The queen at [4,0] can't attack the king cause it's blocked by the queen at [1,0].   The queen at [2,4] can't attack the king cause it's not in the same row/column/diagnal as the king.  

Example 2:

Input: queens = [[0,0],[1,1],[2,2],[3,4],[3,5],[4,4],[4,5]], king = [3,3]  Output: [[2,2],[3,4],[4,4]]  

Example 3:

Input: queens = [[5,6],[7,7],[2,1],[0,7],[1,6],[5,1],[3,7],[0,3],[4,0],[1,2],[6,3],[5,0],[0,4],[2,2],[1,1],[6,4],[5,4],[0,0],[2,6],[4,5],[5,2],[1,4],[7,5],[2,3],[0,5],[4,2],[1,0],[2,7],[0,1],[4,6],[6,1],[0,6],[4,3],[1,7]], king = [3,4]  Output: [[2,3],[1,4],[1,6],[3,7],[4,3],[5,4],[4,5]]  

 

Constraints:

  • 1 <= queens.length <= 63
  • queens[0].length == 2
  • 0 <= queens[i][j] < 8
  • king.length == 2
  • 0 <= king[0], king[1] < 8
  • At most one piece is allowed in a cell.

解题思路:往king的上下左右,上左,上右,下左,下右八个方向移动,如果某个方向遇到queen,则表示这个queen能攻击到king,然后停止这个方向的移动。

代码如下:

class Solution(object):      def queensAttacktheKing(self, queens, king):          """          :type queens: List[List[int]]          :type king: List[int]          :rtype: List[List[int]]          """          res = []          dic = {}          for (x,y) in queens:dic[(x,y)] = 1          direction = [(0,1),(0,-1),(-1,0),(1,0),(-1,-1),(-1,1),(1,-1),(1,1)]          for (x,y) in direction:              kx,ky = king              while kx + x >= 0 and kx + x < 8 and ky+y>=0 and ky+ y < 8:                  if (kx+x,ky+y) in dic:                      res.append([kx+x,ky+y])                      break                  kx += x                  ky += y          return res

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!