'LeetCode基礎算法題第150篇:車能捕獲棋子的最大數'

"
"
LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

持續分享,敬請關注。

LeetCode 999. 車能捕獲棋子的最大數(Available Captures for Rook)

問題描述:

在一個8 x 8的棋盤board中,有一個白色的車,若干空白區域,若干白色的象,若干黑色的卒,它們分別用字符'R','.','B'和'p'表示。大寫字母表示白色棋子,小寫字母表示黑色棋子。

車的移動遵循國際象棋的規則:

  • 選擇4個方向(東南西北)中的任意一個,然後朝那個方向移動,一直到它選擇停止或者到達棋盤的邊界又或者捕獲了不同顏色的卒;
  • 如果車移動的過程碰到了相同顏色的象,它只能停止,不能跳過去;

請返回該車能捕獲的卒的最大數。

注:

  1. board.length == board[i].length == 8;
  2. board[i][j] 只能是 'R', '.', 'B', 或 'p'其中的一個;
  3. board[i][j] == 'R' 一定是存在的;

示例:

"
LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

持續分享,敬請關注。

LeetCode 999. 車能捕獲棋子的最大數(Available Captures for Rook)

問題描述:

在一個8 x 8的棋盤board中,有一個白色的車,若干空白區域,若干白色的象,若干黑色的卒,它們分別用字符'R','.','B'和'p'表示。大寫字母表示白色棋子,小寫字母表示黑色棋子。

車的移動遵循國際象棋的規則:

  • 選擇4個方向(東南西北)中的任意一個,然後朝那個方向移動,一直到它選擇停止或者到達棋盤的邊界又或者捕獲了不同顏色的卒;
  • 如果車移動的過程碰到了相同顏色的象,它只能停止,不能跳過去;

請返回該車能捕獲的卒的最大數。

注:

  1. board.length == board[i].length == 8;
  2. board[i][j] 只能是 'R', '.', 'B', 或 'p'其中的一個;
  3. board[i][j] == 'R' 一定是存在的;

示例:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

"
LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

持續分享,敬請關注。

LeetCode 999. 車能捕獲棋子的最大數(Available Captures for Rook)

問題描述:

在一個8 x 8的棋盤board中,有一個白色的車,若干空白區域,若干白色的象,若干黑色的卒,它們分別用字符'R','.','B'和'p'表示。大寫字母表示白色棋子,小寫字母表示黑色棋子。

車的移動遵循國際象棋的規則:

  • 選擇4個方向(東南西北)中的任意一個,然後朝那個方向移動,一直到它選擇停止或者到達棋盤的邊界又或者捕獲了不同顏色的卒;
  • 如果車移動的過程碰到了相同顏色的象,它只能停止,不能跳過去;

請返回該車能捕獲的卒的最大數。

注:

  1. board.length == board[i].length == 8;
  2. board[i][j] 只能是 'R', '.', 'B', 或 'p'其中的一個;
  3. board[i][j] == 'R' 一定是存在的;

示例:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

"
LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

持續分享,敬請關注。

LeetCode 999. 車能捕獲棋子的最大數(Available Captures for Rook)

問題描述:

在一個8 x 8的棋盤board中,有一個白色的車,若干空白區域,若干白色的象,若干黑色的卒,它們分別用字符'R','.','B'和'p'表示。大寫字母表示白色棋子,小寫字母表示黑色棋子。

車的移動遵循國際象棋的規則:

  • 選擇4個方向(東南西北)中的任意一個,然後朝那個方向移動,一直到它選擇停止或者到達棋盤的邊界又或者捕獲了不同顏色的卒;
  • 如果車移動的過程碰到了相同顏色的象,它只能停止,不能跳過去;

請返回該車能捕獲的卒的最大數。

注:

  1. board.length == board[i].length == 8;
  2. board[i][j] 只能是 'R', '.', 'B', 或 'p'其中的一個;
  3. board[i][j] == 'R' 一定是存在的;

示例:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

C語言實現:

沒有發現什麼特別好的方法,只能是先遍歷board找到車的位置。

找到位置後分別從東西南北四個方向查找是否有對方的卒存在。

對於每個方向上的查找存在如下情況:

  • 什麼都沒找到,直接到達了邊界;
  • 先找到了己方的象,這時候應該直接停止,結束這個方向上的查找;
  • 先找到了對方的卒,結果應該加1;

等到四個方向都找遍了以後,直接結束遍歷,返回結果即可。

詳細代碼如下:

"
LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

持續分享,敬請關注。

LeetCode 999. 車能捕獲棋子的最大數(Available Captures for Rook)

問題描述:

在一個8 x 8的棋盤board中,有一個白色的車,若干空白區域,若干白色的象,若干黑色的卒,它們分別用字符'R','.','B'和'p'表示。大寫字母表示白色棋子,小寫字母表示黑色棋子。

車的移動遵循國際象棋的規則:

  • 選擇4個方向(東南西北)中的任意一個,然後朝那個方向移動,一直到它選擇停止或者到達棋盤的邊界又或者捕獲了不同顏色的卒;
  • 如果車移動的過程碰到了相同顏色的象,它只能停止,不能跳過去;

請返回該車能捕獲的卒的最大數。

注:

  1. board.length == board[i].length == 8;
  2. board[i][j] 只能是 'R', '.', 'B', 或 'p'其中的一個;
  3. board[i][j] == 'R' 一定是存在的;

示例:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

C語言實現:

沒有發現什麼特別好的方法,只能是先遍歷board找到車的位置。

找到位置後分別從東西南北四個方向查找是否有對方的卒存在。

對於每個方向上的查找存在如下情況:

  • 什麼都沒找到,直接到達了邊界;
  • 先找到了己方的象,這時候應該直接停止,結束這個方向上的查找;
  • 先找到了對方的卒,結果應該加1;

等到四個方向都找遍了以後,直接結束遍歷,返回結果即可。

詳細代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

可能會有讀者覺得4個方向都寫上去,很醜陋,代碼有冗餘。

我個人覺得,還好,感官上覺得這個更清晰,一看就知道是4個方向。

當然,你也可以的定義一個方向數組,類似{{0,1},{0,-1},{1,0},{-1,0}}這樣的。但是也是有瑕疵的,就是對每一個方向上的查找都要檢查行和列有沒有溢出,但是我們知道,其實不用都檢查,比如你向上(北)檢查,列是固定的,一定不會溢出,沒必要檢查。在python實現中,我們準備展示這種實現。

"
LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

持續分享,敬請關注。

LeetCode 999. 車能捕獲棋子的最大數(Available Captures for Rook)

問題描述:

在一個8 x 8的棋盤board中,有一個白色的車,若干空白區域,若干白色的象,若干黑色的卒,它們分別用字符'R','.','B'和'p'表示。大寫字母表示白色棋子,小寫字母表示黑色棋子。

車的移動遵循國際象棋的規則:

  • 選擇4個方向(東南西北)中的任意一個,然後朝那個方向移動,一直到它選擇停止或者到達棋盤的邊界又或者捕獲了不同顏色的卒;
  • 如果車移動的過程碰到了相同顏色的象,它只能停止,不能跳過去;

請返回該車能捕獲的卒的最大數。

注:

  1. board.length == board[i].length == 8;
  2. board[i][j] 只能是 'R', '.', 'B', 或 'p'其中的一個;
  3. board[i][j] == 'R' 一定是存在的;

示例:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

C語言實現:

沒有發現什麼特別好的方法,只能是先遍歷board找到車的位置。

找到位置後分別從東西南北四個方向查找是否有對方的卒存在。

對於每個方向上的查找存在如下情況:

  • 什麼都沒找到,直接到達了邊界;
  • 先找到了己方的象,這時候應該直接停止,結束這個方向上的查找;
  • 先找到了對方的卒,結果應該加1;

等到四個方向都找遍了以後,直接結束遍歷,返回結果即可。

詳細代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

可能會有讀者覺得4個方向都寫上去,很醜陋,代碼有冗餘。

我個人覺得,還好,感官上覺得這個更清晰,一看就知道是4個方向。

當然,你也可以的定義一個方向數組,類似{{0,1},{0,-1},{1,0},{-1,0}}這樣的。但是也是有瑕疵的,就是對每一個方向上的查找都要檢查行和列有沒有溢出,但是我們知道,其實不用都檢查,比如你向上(北)檢查,列是固定的,一定不會溢出,沒必要檢查。在python實現中,我們準備展示這種實現。

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

"
LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

持續分享,敬請關注。

LeetCode 999. 車能捕獲棋子的最大數(Available Captures for Rook)

問題描述:

在一個8 x 8的棋盤board中,有一個白色的車,若干空白區域,若干白色的象,若干黑色的卒,它們分別用字符'R','.','B'和'p'表示。大寫字母表示白色棋子,小寫字母表示黑色棋子。

車的移動遵循國際象棋的規則:

  • 選擇4個方向(東南西北)中的任意一個,然後朝那個方向移動,一直到它選擇停止或者到達棋盤的邊界又或者捕獲了不同顏色的卒;
  • 如果車移動的過程碰到了相同顏色的象,它只能停止,不能跳過去;

請返回該車能捕獲的卒的最大數。

注:

  1. board.length == board[i].length == 8;
  2. board[i][j] 只能是 'R', '.', 'B', 或 'p'其中的一個;
  3. board[i][j] == 'R' 一定是存在的;

示例:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

C語言實現:

沒有發現什麼特別好的方法,只能是先遍歷board找到車的位置。

找到位置後分別從東西南北四個方向查找是否有對方的卒存在。

對於每個方向上的查找存在如下情況:

  • 什麼都沒找到,直接到達了邊界;
  • 先找到了己方的象,這時候應該直接停止,結束這個方向上的查找;
  • 先找到了對方的卒,結果應該加1;

等到四個方向都找遍了以後,直接結束遍歷,返回結果即可。

詳細代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

可能會有讀者覺得4個方向都寫上去,很醜陋,代碼有冗餘。

我個人覺得,還好,感官上覺得這個更清晰,一看就知道是4個方向。

當然,你也可以的定義一個方向數組,類似{{0,1},{0,-1},{1,0},{-1,0}}這樣的。但是也是有瑕疵的,就是對每一個方向上的查找都要檢查行和列有沒有溢出,但是我們知道,其實不用都檢查,比如你向上(北)檢查,列是固定的,一定不會溢出,沒必要檢查。在python實現中,我們準備展示這種實現。

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

"
LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

持續分享,敬請關注。

LeetCode 999. 車能捕獲棋子的最大數(Available Captures for Rook)

問題描述:

在一個8 x 8的棋盤board中,有一個白色的車,若干空白區域,若干白色的象,若干黑色的卒,它們分別用字符'R','.','B'和'p'表示。大寫字母表示白色棋子,小寫字母表示黑色棋子。

車的移動遵循國際象棋的規則:

  • 選擇4個方向(東南西北)中的任意一個,然後朝那個方向移動,一直到它選擇停止或者到達棋盤的邊界又或者捕獲了不同顏色的卒;
  • 如果車移動的過程碰到了相同顏色的象,它只能停止,不能跳過去;

請返回該車能捕獲的卒的最大數。

注:

  1. board.length == board[i].length == 8;
  2. board[i][j] 只能是 'R', '.', 'B', 或 'p'其中的一個;
  3. board[i][j] == 'R' 一定是存在的;

示例:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

C語言實現:

沒有發現什麼特別好的方法,只能是先遍歷board找到車的位置。

找到位置後分別從東西南北四個方向查找是否有對方的卒存在。

對於每個方向上的查找存在如下情況:

  • 什麼都沒找到,直接到達了邊界;
  • 先找到了己方的象,這時候應該直接停止,結束這個方向上的查找;
  • 先找到了對方的卒,結果應該加1;

等到四個方向都找遍了以後,直接結束遍歷,返回結果即可。

詳細代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

可能會有讀者覺得4個方向都寫上去,很醜陋,代碼有冗餘。

我個人覺得,還好,感官上覺得這個更清晰,一看就知道是4個方向。

當然,你也可以的定義一個方向數組,類似{{0,1},{0,-1},{1,0},{-1,0}}這樣的。但是也是有瑕疵的,就是對每一個方向上的查找都要檢查行和列有沒有溢出,但是我們知道,其實不用都檢查,比如你向上(北)檢查,列是固定的,一定不會溢出,沒必要檢查。在python實現中,我們準備展示這種實現。

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

Python語言實現:

Python 的實現和C語言思想一致,僅僅在查找方向上,為了縮短代碼量做了優化,詳細見C實現的說明。

代碼如下:

"
LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

持續分享,敬請關注。

LeetCode 999. 車能捕獲棋子的最大數(Available Captures for Rook)

問題描述:

在一個8 x 8的棋盤board中,有一個白色的車,若干空白區域,若干白色的象,若干黑色的卒,它們分別用字符'R','.','B'和'p'表示。大寫字母表示白色棋子,小寫字母表示黑色棋子。

車的移動遵循國際象棋的規則:

  • 選擇4個方向(東南西北)中的任意一個,然後朝那個方向移動,一直到它選擇停止或者到達棋盤的邊界又或者捕獲了不同顏色的卒;
  • 如果車移動的過程碰到了相同顏色的象,它只能停止,不能跳過去;

請返回該車能捕獲的卒的最大數。

注:

  1. board.length == board[i].length == 8;
  2. board[i][j] 只能是 'R', '.', 'B', 或 'p'其中的一個;
  3. board[i][j] == 'R' 一定是存在的;

示例:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

C語言實現:

沒有發現什麼特別好的方法,只能是先遍歷board找到車的位置。

找到位置後分別從東西南北四個方向查找是否有對方的卒存在。

對於每個方向上的查找存在如下情況:

  • 什麼都沒找到,直接到達了邊界;
  • 先找到了己方的象,這時候應該直接停止,結束這個方向上的查找;
  • 先找到了對方的卒,結果應該加1;

等到四個方向都找遍了以後,直接結束遍歷,返回結果即可。

詳細代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

可能會有讀者覺得4個方向都寫上去,很醜陋,代碼有冗餘。

我個人覺得,還好,感官上覺得這個更清晰,一看就知道是4個方向。

當然,你也可以的定義一個方向數組,類似{{0,1},{0,-1},{1,0},{-1,0}}這樣的。但是也是有瑕疵的,就是對每一個方向上的查找都要檢查行和列有沒有溢出,但是我們知道,其實不用都檢查,比如你向上(北)檢查,列是固定的,一定不會溢出,沒必要檢查。在python實現中,我們準備展示這種實現。

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

Python語言實現:

Python 的實現和C語言思想一致,僅僅在查找方向上,為了縮短代碼量做了優化,詳細見C實現的說明。

代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

"
LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章後評論或者私信給我。

持續分享,敬請關注。

LeetCode 999. 車能捕獲棋子的最大數(Available Captures for Rook)

問題描述:

在一個8 x 8的棋盤board中,有一個白色的車,若干空白區域,若干白色的象,若干黑色的卒,它們分別用字符'R','.','B'和'p'表示。大寫字母表示白色棋子,小寫字母表示黑色棋子。

車的移動遵循國際象棋的規則:

  • 選擇4個方向(東南西北)中的任意一個,然後朝那個方向移動,一直到它選擇停止或者到達棋盤的邊界又或者捕獲了不同顏色的卒;
  • 如果車移動的過程碰到了相同顏色的象,它只能停止,不能跳過去;

請返回該車能捕獲的卒的最大數。

注:

  1. board.length == board[i].length == 8;
  2. board[i][j] 只能是 'R', '.', 'B', 或 'p'其中的一個;
  3. board[i][j] == 'R' 一定是存在的;

示例:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

C語言實現:

沒有發現什麼特別好的方法,只能是先遍歷board找到車的位置。

找到位置後分別從東西南北四個方向查找是否有對方的卒存在。

對於每個方向上的查找存在如下情況:

  • 什麼都沒找到,直接到達了邊界;
  • 先找到了己方的象,這時候應該直接停止,結束這個方向上的查找;
  • 先找到了對方的卒,結果應該加1;

等到四個方向都找遍了以後,直接結束遍歷,返回結果即可。

詳細代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

可能會有讀者覺得4個方向都寫上去,很醜陋,代碼有冗餘。

我個人覺得,還好,感官上覺得這個更清晰,一看就知道是4個方向。

當然,你也可以的定義一個方向數組,類似{{0,1},{0,-1},{1,0},{-1,0}}這樣的。但是也是有瑕疵的,就是對每一個方向上的查找都要檢查行和列有沒有溢出,但是我們知道,其實不用都檢查,比如你向上(北)檢查,列是固定的,一定不會溢出,沒必要檢查。在python實現中,我們準備展示這種實現。

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

Python語言實現:

Python 的實現和C語言思想一致,僅僅在查找方向上,為了縮短代碼量做了優化,詳細見C實現的說明。

代碼如下:

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數

LeetCode基礎算法題第150篇:車能捕獲棋子的最大數


謝謝大家一直以來的關注和支持!

我一直在努力的寫好每一篇文章,畫好每一份插圖。但是作為一個996從業人員,時間精力十分有限。所以針對評論部分,以後只回答粉絲的問題和私信。希望僅僅是路過的朋友能夠體諒,希望更多人關注《吾是我師》,謝謝!


"

相關推薦

推薦中...