在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”,“B” 和 “p” 给出。大写字符表示白棋,小写字符表示黑棋。
车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格上颜色相反的卒。另外,车不能与其他友方(白色)象进入同一个方格。
返回车能够在一次移动中捕获到的卒的数量。
这题真的简单。。。随便记记就,四个方向走就完事了。今天一定要开始Go语言和C++ http项目。
class Solution {
public:
int numRookCaptures(vector<vector<char>>& board) {
int x, y;
int ans = 0;
int row = board.size(), column = board[0].size();
for (int i = 0; i < row; i++){
for (int j = 0; j < column; j++){
if (board[i][j] == 'R'){
x = i, y = j;
}
}
}
int left = x - 1, right = x + 1, up = y - 1, down = y + 1;
while (left >= 0 || right < row || up >= 0 || down < column){
if (left >= 0){
if (board[left][y] == 'p'){
ans++;
left = -1;
}
else if (board[left][y] == 'B'){
left = -1;
}
else{
left--;
}
}
if (right < row){
if (board[right][y] == 'p'){
ans++;
right = row;
}
else if (board[right][y] == 'B'){
right = row;
}
else{
right++;
}
}
if (up >= 0){
if (board[x][up] == 'p'){
ans++;
up = -1;
}
else if (board[x][up] == 'B'){
up = -1;
}
else{
up--;
}
}
if (down < column){
if (board[x][down] == 'p'){
ans++;
down = column;
}
else if (board[x][down] == 'B'){
down = column;
}
else{
down++;
}
}
}
return ans;
}
};