车的可用捕获量

问题描述:

在一个 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

posted @ 2020-03-26 23:17  Rewivy  阅读(121)  评论(0编辑  收藏  举报