# LeetCode999. 车的可用捕获量 [简单]——每日一题系列

输入：[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","R",".",".",".","p"],
[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],
[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]



输入：[[".",".",".",".",".",".",".","."],[".","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",".","."],
[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]



1.小白菜第一反应，求出车的坐标，四个for循环。。。

class Solution {
public:
int numRookCaptures(vector<vector<char>>& board) {
int num=0;
int flag=0;
int i,j;
for( i=0;i<8;i++){
if(count(board[i].begin(),board[i].end(),'R')){
for( j=0;j<8;j++){
if(board[i][j]=='R'){
flag=1;
break;
}
}
}
if(flag)break;
}

if(!flag)   return 0;
for(int m=i-1,n=j;m>=0;m--){//北
if(board[m][n]=='B')    break;
if(board[m][n]=='p'){   num++;     break;     }
else    continue;
}
for(int m=i+1,n=j;m<8;m++){//南
if(board[m][n]=='B')    break;
if(board[m][n]=='p'){   num++;     break;     }
else    continue;
}
for(int m=i,n=j+1;n<8;n++){//东
if(board[m][n]=='B')    break;
if(board[m][n]=='p'){   num++;    break;     }
else    continue;
}
for(int m=i,n=j-1;n>=0;n--){//西
if(board[m][n]=='B')    break;
if(board[m][n]=='p'){   num++;    break;     }
else    continue;
}
return num;
}
};

2. 使用方向数组代表移动的方向，四个for循环合一，这个快了好多

class Solution {
public:
int numRookCaptures(vector<vector<char>>& board) {
int num=0;
int i,j;
int flag=0;
for( i=0;i<8;i++){
if(count(board[i].begin(),board[i].end(),'R')){
for( j=0;j<8;j++){
if(board[i][j]=='R'){
flag=1;
break;
}
}
}
if(flag)    break;
}//求得车的坐标
int x[]={-1,1,0,0};
int y[]={0,0,1,-1};
for(int p=0;p<4;p++){
int m=i,n=j;
m+=x[p];
n+=y[p];
while(m>=0 && m<8 && n>=0 && n<8){
if(board[m][n]=='B')    break;
else if(board[m][n]=='.'){   m+=x[p];n+=y[p];}
else    {num++;break;}
}
}
return num;
}
};

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客