2023-09-14每日一题
一、题目编号
1222. 可以攻击国王的皇后
二、题目链接
点击跳转到题目位置
三、题目描述
在一个 8x8 的棋盘上,放置着若干「黑皇后」和一个「白国王」。
给定一个由整数坐标组成的数组 queens ,表示黑皇后的位置;以及一对坐标 king ,表示白国王的位置,返回所有可以攻击国王的皇后的坐标(任意顺序)。
示例 1:
示例 2:
示例 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) 模拟即可