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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[Leetcode][第130题][JAVA][被围绕的区域][DFS][BFS]

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

【問題描述】[中等]

【解答思路】

1. 深度優(yōu)先搜索

使用深度優(yōu)先搜索實現(xiàn)標(biāo)記操作。在下面的代碼中,我們把標(biāo)記過的字母 O 修改為字母 A。
復(fù)雜度

class Solution {int[] dx = {1, -1, 0, 0};int[] dy = {0, 0, 1, -1};public void solve(char[][] board) {int n = board.length;if (n == 0) {return;}int m = board[0].length;Queue<int[]> queue = new LinkedList<int[]>();for (int i = 0; i < n; i++) {if (board[i][0] == 'O') {queue.offer(new int[]{i, 0});}if (board[i][m - 1] == 'O') {queue.offer(new int[]{i, m - 1});}}for (int i = 1; i < m - 1; i++) {if (board[0][i] == 'O') {queue.offer(new int[]{0, i});}if (board[n - 1][i] == 'O') {queue.offer(new int[]{n - 1, i});}}while (!queue.isEmpty()) {int[] cell = queue.poll();int x = cell[0], y = cell[1];board[x][y] = 'A';for (int i = 0; i < 4; i++) {int mx = x + dx[i], my = y + dy[i];if (mx < 0 || my < 0 || mx >= n || my >= m || board[mx][my] != 'O') {continue;}queue.offer(new int[]{mx, my});}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (board[i][j] == 'A') {board[i][j] = 'O';} else if (board[i][j] == 'O') {board[i][j] = 'X';}}}} }
2. 廣度優(yōu)先搜索

以使用廣度優(yōu)先搜索實現(xiàn)標(biāo)記操作。在下面的代碼中,我們把標(biāo)記過的字母 O 修改為字母 A
時間復(fù)雜度:O(N) 空間復(fù)雜度:O(1)

class Solution {int[] dx = {1, -1, 0, 0};int[] dy = {0, 0, 1, -1};public void solve(char[][] board) {int n = board.length;if (n == 0) {return;}int m = board[0].length;Queue<int[]> queue = new LinkedList<int[]>();for (int i = 0; i < n; i++) {if (board[i][0] == 'O') {queue.offer(new int[]{i, 0});}if (board[i][m - 1] == 'O') {queue.offer(new int[]{i, m - 1});}}for (int i = 1; i < m - 1; i++) {if (board[0][i] == 'O') {queue.offer(new int[]{0, i});}if (board[n - 1][i] == 'O') {queue.offer(new int[]{n - 1, i});}}while (!queue.isEmpty()) {int[] cell = queue.poll();int x = cell[0], y = cell[1];board[x][y] = 'A';for (int i = 0; i < 4; i++) {int mx = x + dx[i], my = y + dy[i];if (mx < 0 || my < 0 || mx >= n || my >= m || board[mx][my] != 'O') {continue;}queue.offer(new int[]{mx, my});}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (board[i][j] == 'A') {board[i][j] = 'O';} else if (board[i][j] == 'O') {board[i][j] = 'X';}}}} }

【總結(jié)】

1. 細(xì)節(jié):

1.1 方向定義
int[] dx = {1, -1, 0, 0};
int[] dy = {0, 0, 1, -1};
1.2 邊界判斷
if (mx < 0 || my < 0 || mx >= n || my >= m || board[mx][my] != ‘O’) {
continue;
}

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

2.DFS BFS 思路不復(fù)雜 注意細(xì)節(jié) 多寫幾遍

轉(zhuǎn)載鏈接:https://leetcode-cn.com/problems/surrounded-regions/solution/bei-wei-rao-de-qu-yu-by-leetcode-solution/

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

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

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