LeetCode 17 被圍繞的區域

2021-10-06 21:18:54 字數 1762 閱讀 3777

碼上生花,echarts 作品展示賽正式啟動!>>>

給定乙個二維的矩陣,包含'x''o'字母 o)。

找到所有被'x'圍繞的區域,並將這些區域裡所有的'o''x'填充。

示例:

x x x x

x o o x

x x o x

x o x x

執行你的函式後,矩陣變為:

x x x x

x x x x

x x x x

x o x x

解釋:

被圍繞的區間不會存在於邊界上,換句話說,任何邊界上的 'o' 都不會被填充為 'x'。 任何不在邊界上,或不與邊界上的 'o' 相連的 'o' 最終都會被填充為 'x'。如果兩個元素在水平或垂直方向相鄰,則稱它們是「相連」的。

這道題我們拿到基本就可以確定是圖的 dfs、bfs 遍歷的題目了。題目中解釋說被包圍的區間不會存在於邊界上,所以我們會想到邊界上的 o 要特殊處理,只要把邊界上的 o 特殊處理了,那麼剩下的 o 替換成 x 就可以了。問題轉化為,如何尋找和邊界聯通的 o,我們需要考慮如下情況。

x x x x

x o o x

x x o x

x o o x

這時候的 o 是不做替換的。因為和邊界是連通的。為了記錄這種狀態,我們把這種情況下的 o 換成 # 作為佔位符,待搜尋結束之後,遇到 o 替換為 x(和邊界不連通的 o);遇到 #,替換回 o(和邊界連通的 o)。

如何尋找和邊界聯通的o?

從邊界出發,對圖進行 dfs 和 bfs 即可。這裡簡單總結下 dfs 和 dfs。

bfs 遞迴。可以想想二叉樹中如何遞迴的進行層序遍歷。 bfs 非遞迴。一般用佇列儲存。 dfs 遞迴。最常用,如二叉樹的先序遍歷。 dfs 非遞迴。一般用 stack。

那麼基於上面這種想法,我們有四種方式實現。

我這裡就列出一種,只記住這種

package com.janeroad;

public class test6 }}

for (int i = 0; i < m; i++)

if (board[i][j] == '#') }}

}public void dfs(char board, int i, int j)

board[i][j] = '#';

dfs(board, i - 1, j);

// 上

dfs(board, i + 1, j);

// 下

dfs(board, i, j - 1);

// 左

dfs(board, i, j + 1);

// 右

}public static void main(string args) ,,,};

test6 test6=new test6();

test6.solve(board);

for(int i=0;i

system.out.print("}");

system.out.println();}}

}

10 31 LeetCode 130 被圍繞的區域

題目描述 給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x 執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x 解釋 被圍繞的...

LeetCode 被圍繞的區域

給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x 執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x 解釋 被圍繞的區間不會存...

LeetCode 17最長公共字首。

編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母a z。以第乙個為基準,比較後面的。class s...