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) 模拟即可