classSolution{publicintnumRookCaptures(char[][] board){int ans =0;int i =0;int j =0;for(int m=0;m<8;m++){for(int n=0;n<8;n++){if(board[m][n]=='R'){
i = m;
j = n;break;}}}//下int k = i;while(k>=0){if(board[k][j]=='p'){
ans++;break;}elseif(board[k][j]=='B'){break;}
k--;}//上
k = i;while(k<8){if(board[k][j]=='p'){
ans++;break;}elseif(board[k][j]=='B'){break;}
k++;}//左
k = j;while(k>=0){if(board[i][k]=='p'){
ans++;break;}elseif(board[i][k]=='B'){break;}
k--;}//右
k = i;while(k<8){if(board[i][k]=='p'){
ans++;break;}elseif(board[i][k]=='B'){break;}
k++;}return ans;}}
题解做法:用两个数组表示四个方向,碰到好几次了,下次记得用。
classSolution{publicintnumRookCaptures(char[][] board){// 定义上下左右四个方向int[] dx ={-1,1,0,0};int[] dy ={0,0,-1,1};for(int i =0; i <8; i++){for(int j =0; j <8; j++){// 找到白车所在的位置if(board[i][j]=='R'){// 分别判断白车的上、下、左、右四个方向int res =0;for(int k =0; k <4; k++){int x = i, y = j;while(true){
x += dx[k];
y += dy[k];if(x <0|| x >=8|| y <0|| y >=8|| board[x][y]=='B'){break;}if(board[x][y]=='p'){
res++;break;}}}return res;}}}return0;}}
作者:sweetiee
链接:https://leetcode-cn.com/problems/available-captures-for-rook/solution/jian-dan-java100-by-sweetiee/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。