车的可用捕获量
问题描述:
在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”,“B” 和 “p” 给出。大写字符表示白棋,小写字符表示黑棋。
车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格上颜色相反的卒。另外,车不能与其他友方(白色)象进入同一个方格。
返回车能够在一次移动中捕获到的卒的数量。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/available-captures-for-rook/
思路:
象棋盘上有四种类型的元素——“白车 R”“空格子 .”“白象 B”“黑卒 p”
以R为中心,可以向东南西北四个方向移动,
如果有p,则可以捕获,
如果有B,则不能移动
结合所给测试用例,本题所要求的是R在一次移动中可能捕捉到的p的数量
如下图,红色底格子即为R可捕捉到的p
本题的结果是3
本题的结果是3
代码:
以上,希望对各位有所帮助
200326 Rewivy
public static int getNumRookCaptures(char[][] board) {int count = 0;int a=-1,b=-1;for(int i=0;i<board.length;i++) {for(int j=0;j<board[i].length;j++) {if('R'==board[i][j]){a = i;b = j;break;}}if(a>0)break;}//left 以车为中心向左边寻找黑棋for(int i=a;i>=0;i--) {if(board[i][b]=='B') break;//遇到白象则停止寻找if(board[i][b]=='p') {//遇到第一个黑棋则记录并停止寻找count++;break;}}//rightfor(int i=a;i<board.length;i++) {if(board[i][b]=='B') break;if(board[i][b]=='p') {count++;break;}}//upfor(int j=b;j>=0;j--) {if(board[a][j]=='B') break;if(board[a][j]=='p') {count++;break;}}//down for(int j=b;j<board[a].length;j++) {if(board[a][j]=='B') break;if(board[a][j]=='p') {count++;break;}}return count;}//Rewivy 2020.03.26