一道中等難度題 被圍繞的區域

2021-10-23 12:50:10 字數 1318 閱讀 8535

給乙個二維的矩陣,包含 『x』 和 『o』, 找到所有被 『x』 圍繞的區域,並用 『x』 替換其中所有的 『o』。

樣例 1:

輸入:

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

樣例 2:

輸入: 

x x x x

x o o x

x o o x

x o x x

輸出:

x x x x

x o o x

x o o x

x o x x

[題解]

演算法:dfs 思路:先從外圍開始,只有身處外圍的 o 是無法被包圍的,同理,與乙個無法被包圍的 o 相連的 o 也是無法被包圍的。

從外圍開始,若遇到邊界的 o,則將其標記為 ,意味無法被包圍的 o 依次對外圈的「o」的四個方向做 dfs,將其可以到達 o 臨時設定為

最後,遍歷陣列, 將無法被包圍的 o,也就是此時被標記為 * 改為 o ; x 不變; 將可以被包圍的區域,即沒被標記過的 o 變為 x

複雜度分析

時間複雜度 o(nm) 搜尋一次圖即可

空間複雜度 o(nm) 圖的大小

public class solution 

int n = board.length,m = board[0].length;

//四周向中間搜

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

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

//遍歷圖,更新結果

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

else if (board[i][j] == '*') }}

}public void dfs(char board , int x , int y)

if (board[x][y] != 'o')

board[x][y] = '*';

dfs(board , x + 1, y);

dfs(board , x - 1, y);

dfs(board , x , y + 1);

dfs(board , x , y - 1);

}public boolean is_border(int x,int y,int n,int m)

return false;

}}

更多題解參見

每日刷題 被圍繞的區域

給定乙個二維的矩陣,包含 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第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 解釋 被圍繞的區間不會存...

去年,螞蟻一面的一道筆試題,中等難度

你好,我是 yes。最近不是跳槽季嘛,今兒我就來分享一道我之前遇到的筆試題 上機寫 這裡統稱筆試 這道題遇到的機率還是比較高的。很多人可能準備去一波阿里或者其他大廠,而這些大廠面試過程一般都會有筆試。不過有很多人可能沒經歷過筆試,所以我先分享一下我之前面螞蟻金服時候的筆試經歷。一般沒特意去練練是真的...