# Rook Leetcode解決方案的可用捕獲

## 問題陳述

### 例

```board = [[".",".",".",".",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".","R",".",".",".","p"],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."]]```
`3`
```board = [[".",".",".",".",".",".",".","."],
[".","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",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."]]```
`0`

## 途徑

### 算法

1. 遍歷整個矩陣以找到字符“ R”，並將其行和列號保存在 分別。
2. 初始化 CNT 存儲可以捕獲的典當數量
3. 檢查頂部方向，範圍： i∈（0，r – 1）:
• if 板[i] [c] =='p'：
• 增量 CNT, cnt ++
• 打破
• if 板[i] [c] =='B'：
• 打破
4. 對左，右和下方向進行相同的操作
5. 返回 CNT

### Rook Leetcode解決方案可用捕獲的實現

#### C ++程序

```#include <bits/stdc++.h>

using namespace std;

int numRookCaptures(vector<vector<char>>& board)
{
if(board.empty())
return 0;
int n = board.size() , m = board[0].size() , cnt = 0 , r , c;

for(int i = 0 ; i < n ; i++)
for(int j = 0 ; j < m ; j++)
{
if(board[i][j] == 'R')
{
r = i;
c = j;
break;
}
}

for(int i = r - 1 ; i >= 0 ; i--)
{
if(board[i][c] == 'p')
{
cnt++;
break;
}
if(board[i][c] == 'B')
break;
}
for(int i = r + 1 ; i < n ; i++)
{
if(board[i][c] == 'p')
{
cnt++;
break;
}
if(board[i][c] == 'B')
break;
}

for(int j = c - 1 ; j >= 0 ; j--)
{
if(board[r][j] == 'p')
{
cnt++;
break;
}
if(board[r][j] == 'B')
break;
}

for(int j = c + 1 ; j < m ; j++)
{
if(board[r][j] == 'p')
{
cnt++;
break;
}
if(board[r][j] == 'B')
break;
}
return cnt;
}

int main() {
vector <vector <char> > board = {{'.','.','.','.','.','.','.','.'},
{'.','.','.','p','.','.','.','.'},
{'.','.','.','R','.','.','.','p'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','p','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'}};

cout << numRookCaptures(board) << endl;
return 0;
}```

#### Java程序

```class number_of_rook_captures {

public static void main(String args[]) {
char[][] board = {{'.','.','.','.','.','.','.','.'},
{'.','.','.','p','.','.','.','.'},
{'.','.','.','R','.','.','.','p'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','p','.','.','.','.'},
{'.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.'}};

System.out.println(numRookCaptures(board));
}

public static int numRookCaptures(char [][] board) {
if(board.length == 0)
return 0;
int n = board.length , m = board[0].length , cnt = 0 , r = -1 , c = -1;

for(int i = 0 ; i < n ; i++)
for(int j = 0 ; j < m ; j++)
{
if(board[i][j] == 'R')
{
r = i;
c = j;
break;
}
}

for(int i = r - 1 ; i >= 0 ; i--)
{
if(board[i][c] == 'p')
{
cnt++;
break;
}
if(board[i][c] == 'B')
break;
}
for(int i = r + 1 ; i < n ; i++)
{
if(board[i][c] == 'p')
{
cnt++;
break;
}
if(board[i][c] == 'B')
break;
}

for(int j = c - 1 ; j >= 0 ; j--)
{
if(board[r][j] == 'p')
{
cnt++;
break;
}
if(board[r][j] == 'B')
break;
}

for(int j = c + 1 ; j < m ; j++)
{
if(board[r][j] == 'p')
{
cnt++;
break;
}
if(board[r][j] == 'B')
break;
}
return cnt;
}
}```
`3`

### Rook Leetcode解決方案可用捕獲的複雜性分析

#### 時間複雜度

O（1），因為我們迭代了恆定的次數。

#### 空間複雜度

O（1），因為無論輸入內容如何，我們僅使用恆定的存儲空間。