碼上生花,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...