日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode130. 被围绕的区域

發(fā)布時間:2023/12/13 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode130. 被围绕的区域 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

給定一個二維的矩陣,包含?'X'?和?'O'(字母 O)。

找到所有被 'X' 圍繞的區(qū)域,并將這些區(qū)域里所有的?'O' 用 'X' 填充。

示例:

X X X X
X O O X
X X O X
X O X X
運行你的函數(shù)后,矩陣變?yōu)?#xff1a;

X X X X
X X X X
X X X X
X O X X
解釋:

被圍繞的區(qū)間不會存在于邊界上,換句話說,任何邊界上的?'O'?都不會被填充為?'X'。 任何不在邊界上,或不與邊界上的?'O'?相連的?'O'?最終都會被填充為?'X'。如果兩個元素在水平或垂直方向相鄰,則稱它們是“相連”的。

思路:我們發(fā)現(xiàn),沒有被“圍繞”的‘o’就是和邊界連接的。比如如下情況:

X X O X
X O O X
X X O X
X O O?X

'O'不會被改變,因為和邊界的‘O’連接,沒有被‘X’圍繞。

所以,我們從邊界開始dfs,把遇到的“O”變?yōu)椤?”代表和邊界相連。

然后遍歷數(shù)組,把''O'變?yōu)閄(因為不和邊界相連),把#變?yōu)閄(因為和邊界相連)。

class Solution {public void solve(char[][] board) {if (board == null || board.length == 0) return;int m = board.length;int n = board[0].length;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {// 從邊緣開始搜索if ((i == 0 || j == 0 || i == m - 1 || j == n - 1) && board[i][j] == 'O') {dfs(board, i, j);}}}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {//沒有被搜索到過,不和邊界連接if (board[i][j] == 'O') {board[i][j] = 'X';}//被改變過,和邊界連接if (board[i][j] == '#') {board[i][j] = 'O';}}}}public void dfs(char[][] board, int i, int j) {if (i < 0 || j < 0 || i >= board.length || j >= board[0].length || board[i][j] == 'X' || board[i][j] == '#') {// board[i][j] == '#' 說明已經(jīng)搜索過了. return;}board[i][j] = '#';dfs(board, i - 1, j); // 上dfs(board, i + 1, j); // 下dfs(board, i, j - 1); // 左dfs(board, i, j + 1); // 右} }

?

總結(jié)

以上是生活随笔為你收集整理的leetcode130. 被围绕的区域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。