今天的題也很簡單,感覺這幾天leetcode的每日一題有點水…
題目鏈接----->999. 車的可用捕獲量
方法一:掃描其所在的行和列
int numRookCaptures(vector<vector<char>>& board) {
int len = board.size();
int i,j,x,y,ans = 0,sum = 0;
for(i = 0; i < len;i++)
{
for(j = 0;j < len;j++)
{
if(board[i][j] == 'R')
{
x = i;
y = j;
break;
}
}
if(j < len)
break;
}
for(i = 0; i < len ;i++)
{
if(i > y)
{
if(board[x][i] == 'B')
break;
else if(board[x][i] == 'p')
{
ans += 1;
break;
}
}
if(board[x][i] == 'p')
sum = 1;
else if(board[x][i] == 'B')
sum = 0;
else if(board[x][i] == 'R')
ans += sum;
}
sum = 0;
for(j = 0;j < len;j++)
{
if(j > x)
{
if(board[j][y] == 'B')
break;
else if(board[j][y] == 'p')
{
ans += 1;
break;
}
}
if(board[j][y] == 'p')
sum = 1;
else if(board[j][y] == 'B')
sum = 0;
else if(board[j][y] == 'R')
ans += sum;
}
return ans;
}
方法二:模擬
int numRookCaptures(vector<vector<char>>& board) {
int len = board.size();
int x,y,ans = 0;
int fxy[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
for(int i = 0;i < len;i++)
{
for(int j = 0; j < len;j++)
{
if(board[i][j] == 'R')
{
x = i;
y = j;
break;
}
}
}
for(int i = 0;i < 4;i++)
{
int dx = x;
int dy = y;
while(1)
{
dx += fxy[i][0];
dy += fxy[i][1];
if(dx < 0 || dx >= len || dy < 0 || dy >= len || board[dx][dy] == 'B')
break;
if(board[dx][dy] == 'p')
{
ans++;
break;
}
}
}
return ans;
}