給乙個二維的矩陣,包含 『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。最近不是跳槽季嘛,今兒我就來分享一道我之前遇到的筆試題 上機寫 這裡統稱筆試 這道題遇到的機率還是比較高的。很多人可能準備去一波阿里或者其他大廠,而這些大廠面試過程一般都會有筆試。不過有很多人可能沒經歷過筆試,所以我先分享一下我之前面螞蟻金服時候的筆試經歷。一般沒特意去練練是真的...