1.题目
2.题解
在一个 8 x 8 的棋盘上,有一个白色的车(Rook),用字符 'R' 表示。棋盘上还可能存在空方块,白色的象(Bishop)以及黑色的卒(pawn),分别用字符 '.','B' 和 'p' 表示。不难看出,大写字符表示的是白棋,小写字符表示的是黑棋。
车按国际象棋中的规则移动。东,西,南,北四个基本方向任选其一,然后一直向选定的方向移动,直到满足下列四个条件之一:
你现在可以控制车移动一次,请你统计有多少敌方的卒处于你的捕获范围内(即,可以被一步捕获的棋子数)。
示例:
输入:
[
[".",".",".",".",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".","R",".",".",".","p"],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."]]
输出:3
解释:
在本例中,车能够捕获所有的卒。
输入:
[
[".",".",".",".",".",".",".","."],
[".","p","p","p","p","p",".","."],
[".","p","p","B","p","p",".","."],
[".","p","B","R","B","p",".","."],
[".","p","p","B","p","p",".","."],
[".","p","p","p","p","p",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."]]
输出:0
解释:
象阻止了车捕获任何卒。
输入:
[
[".",".",".",".",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".","p",".",".",".","."],
["p","p",".","R",".","p","B","."],
[".",".",".",".",".",".",".","."],
[".",".",".","B",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".",".",".",".",".","."]]
输出:3
解释:
车可以捕获位置 b5,d6 和 f5 的卒。
提示:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/available-captures-for-rook
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public class Solution999 {
@Test
public void test999() {
// char[][] board = {
// {'.', '.', '.', '.', '.', '.', '.', '.'},
// {'.', 'p', 'p', 'p', 'p', 'p', '.', '.'},
// {'.', 'p', 'p', 'B', 'p', 'p', '.', '.'},
// {'.', 'p', 'B', 'R', 'B', 'p', '.', '.'},
// {'.', 'p', 'p', 'p', 'p', 'p', '.', '.'},
// {'.', 'p', 'p', 'p', 'p', 'p', '.', '.'},
// {'.', '.', '.', '.', '.', '.', '.', '.'},
// {'.', '.', '.', '.', '.', '.', '.', '.'}};
char[][] board = {
{'.', '.', '.', '.', '.', '.', '.', '.'},
{'.', '.', '.', 'p', '.', '.', '.', '.'},
{'.', '.', '.', 'R', '.', '.', '.', 'p'},
{'.', '.', '.', '.', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.', '.', '.', '.'},
{'.', '.', '.', 'p', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.', '.', '.', '.'}};
System.out.println(numRookCaptures(board));
}
public int numRookCaptures(char[][] board) {
int i = 0, j = 0, x, y, flag = 0, result = 0;
for (i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
if (board[i][j] == 'R') {
flag = 1;
break;
}
}
if (flag == 1) {
break;
}
}
y = i;
while (--y >= 0) {
if (board[y][j] == 'B') {
break;
} else if (board[y][j] == 'p') {
result++;
break;
}
}
y = i;
while (++y < 8) {
if (board[y][j] == 'B') {
break;
} else if (board[y][j] == 'p') {
result++;
break;
}
}
x = j;
while (--x >= 0) {
if (board[i][x] == 'B') {
break;
} else if (board[i][x] == 'p') {
result++;
break;
}
}
x = j;
while (++x < 8) {
if (board[i][x] == 'B') {
break;
} else if (board[i][x] == 'p') {
result++;
break;
}
}
return result;
}
}