• 【leetcode】1222. Queens That Can Attack the King


    题目如下:

    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
  • 相关阅读:
    每天进步一点点--&gt;函数fseek() 使用方法
    几种更新(Update语句)查询的方法
    hibernate批量删除和更新数据
    Android ViewPager使用具体解释
    Linux curses库使用
    安装numpy、nltk问题汇总
    android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)
    Eclipse中SVN的安装步骤(两种)和用法
    Intent用法
    Tomcat全攻略
  • 原文地址:https://www.cnblogs.com/seyjs/p/11684054.html
Copyright © 2020-2023  润新知