2023-09-14 LeetCode每日一题(可以攻击国王的皇后)

2023-09-14每日一题

一、题目编号

1222. 可以攻击国王的皇后

二、题目链接

点击跳转到题目位置

三、题目描述

在一个 8x8 的棋盘上,放置着若干「黑皇后」和一个「白国王」。

给定一个由整数坐标组成的数组 queens ,表示黑皇后的位置;以及一对坐标 king ,表示白国王的位置,返回所有可以攻击国王的皇后的坐标(任意顺序)。
示例 1:
2023-09-14 LeetCode每日一题(可以攻击国王的皇后)_第1张图片

示例 2:
2023-09-14 LeetCode每日一题(可以攻击国王的皇后)_第2张图片

示例 3:
2023-09-14 LeetCode每日一题(可以攻击国王的皇后)_第3张图片
提示:

  • 1 <= queens.length <= 63
  • queens[i].length == 2
  • 0 <= queens[i][j] < 8
  • king.length == 2
  • 0 <= king[0], king[1] < 8
  • 一个棋盘格上最多只能放置一枚棋子。

四、解题代码

class Solution {
public:
    vector<vector<int>> queensAttacktheKing(vector<vector<int>>& queens, vector<int>& king) {
        unordered_set<int> queen_pos;
        for (const auto& queen: queens) {
            int x = queen[0], y = queen[1];
            queen_pos.insert(x * 8 + y);
        }

        vector<vector<int>> ans;
        for (int dx = -1; dx <= 1; ++dx) {
            for (int dy = -1; dy <= 1; ++dy) {
                if (dx == 0 && dy == 0) {
                    continue;
                }
                int kx = king[0] + dx, ky = king[1] + dy;
                while (kx >= 0 && kx < 8 && ky >= 0 && ky < 8) {
                    int pos = kx * 8 + ky;
                    if (queen_pos.count(pos)) {
                        ans.push_back({kx, ky});
                        break;
                    }
                    kx += dx;
                    ky += dy;
                }
            }
        }
        return ans;
    }
};

五、解题思路

(1) 模拟即可

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)