↓快轉到主要內容
  1. LeetCode/

LeetCode 1222: Queens That Can Attack the King

·1 分鐘· ·
LeetCode Medium Array Matrix Simulation
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2025-07-30

  • 提交紀錄:Accepted ×2

解題思路
#

反過來從國王出發(Array 模板五):八個方向各走一次,遇到的第一個皇后能直接攻擊,後面的被擋住了。每個方向最多走 7 步。

我的解法
#

class Solution:
    def queensAttacktheKing(self, queens: List[List[int]], king: List[int]) -> List[List[int]]:
        qs = set(map(tuple, queens))
        res = []
        for dx in (-1, 0, 1):
            for dy in (-1, 0, 1):
                if dx == dy == 0:
                    continue
                x, y = king[0] + dx, king[1] + dy
                while 0 <= x < 8 and 0 <= y < 8:
                    if (x, y) in qs:
                        res.append([x, y])
                        break
                    x, y = x + dx, y + dy
        return res

我當時用 [x, y] in queens 在 list 上查;第二次提交把一堆 if i == -1 改成直接加上方向。棋盤很小所以兩版都很快,這裡改成集合。

複雜度
#

時間 O(q + 8 × 8),空間 O(q)。

要特別避免的錯誤
#

  • 每個方向找到第一個皇后就要停,後面的被擋住。

面試口說整理
#

我從國王往八個方向走,每個方向第一個遇到的皇后就是能攻擊國王的,後面的都被擋住。皇后放進集合,查詢 O(1)。時間 O(q + 64)。

相關文章

LeetCode 54: Spiral Matrix
·1 分鐘
LeetCode Medium Array Matrix Simulation
LeetCode 54 解題筆記:維護上下左右四個邊界,依序走右、下、左、上,每走完一邊就把那個邊界往內縮
LeetCode 59: Spiral Matrix II
·1 分鐘
LeetCode Medium Array Matrix Simulation
LeetCode 59 解題筆記:跟 LC 54 一樣維護四個邊界,只是把讀取換成依序填入 1 到 n²
LeetCode 3494: Find the Minimum Amount of Time to Brew Potions
·1 分鐘
LeetCode Medium Simulation Prefix-Sum Array
LeetCode 3494 解題筆記:每瓶藥先往前推出最後一位巫師的完成時間(每個人都要等自己有空),再往回扣出每位巫師的完成時間
LeetCode 735: Asteroid Collision
·1 分鐘
LeetCode Medium Array Stack Simulation
LeetCode 735 解題筆記:從左到右用 stack,只有「stack 頂端往右、目前的往左」才會相撞,小的爆掉,一樣大一起爆
LeetCode 3070: Count Submatrices with Top-Left Element and Sum Less Than k
·1 分鐘
LeetCode Medium Array Matrix Prefix-Sum
LeetCode 3070 解題筆記:包含左上角的子矩陣就是二維前綴和 P[i][j],數有幾個 <= k
LeetCode 3071: Minimum Operations to Write the Letter Y on a Grid
·1 分鐘
LeetCode Medium Array Hash-Table Matrix Counting
LeetCode 3071 解題筆記:分別數 Y 上和 Y 外每個值的次數,枚舉 Y 的值 a 和背景的值 b(a != b),取最少要改的格子數