题目链接:https://leetcode-cn.com/problems/available-captures-for-rook/
解析:
我想到的是一种比较笨的方法,首先遍历找出车的位置,然后分别在同列向上,同列向下,同行向左,同行向右遍历查找遇到的第一个非空位置,如果是p则加一,遍历结束;如果是B,则遍历结束。最后得出结果。不知道有没有更好的方法,总感觉自己的方法太笨了,又想不出好的方法。
代码:
int numRookCaptures(vector<vector<char>>& board)
{
int rx, ry;
for (int i = 0; i < 8; i++)//找到R的位置
{
int j = 0;
for (; j < 8; j++)
{
if (board[i][j] == 'R')
{
rx = i;
ry = j;
break;
}
}
if (j < 8)
break;
}
int numOfP = 0;
for (int i = rx; i >= 0; i--)//同列向上
{
if (board[i][ry] == 'p')
{
numOfP++;
break;
}
else if (board[i][ry] == 'B')
break;
}
for (int i = rx; i < 8; i++)//同列向下
{
if (board[i][ry] == 'p')
{
numOfP++;
break;
}
else if (board[i][ry] == 'B')
break;
}
for (int j = ry; j >= 0; j--)//同行向左
{
if (board[rx][j] == 'p')
{
numOfP++;
break;
}
else if (board[rx][j] == 'B')
break;
}
for (int j = ry; j < 8; j++)//同行向右
{
if (board[rx][j] == 'p')
{
numOfP++;
break;
}
else if (board[rx][j] == 'B')
break;
}
return numOfP;
}