Li-Taste: 130. Umgebener Bereich (Tiefen-First-Algorithmus)

Geben Sie eine MXN-Matrixtafel an, die aus mehreren Zeichen „X“ und „O“ besteht, suchen Sie alle von „X“ umgebenen Bereiche und füllen Sie alle „O“ in diesen Bereichen mit „X“.
 

Beispiel 1:


Beschreibung:board = [["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 ]]


Erläuterung: Das eingeschlossene Intervall wird an der Grenze nicht existieren, mit anderen Worten, jedes „O“ an der Grenze wird nicht mit „X“ gefüllt. Alle „Os“, die nicht auf der Grenze liegen oder nicht mit einem „O“ auf der Grenze verbunden sind, werden am Ende mit „X“ aufgefüllt. Zwei Elemente werden als „verbunden“ bezeichnet, wenn sie horizontal oder vertikal benachbart sind.
Beispiel 2:

Eingabe: Board = [["X"]]
Ausgabe: [["X"]]
 

Hinweis:

m == board.length
n == board[i].length
1 <= m, n <= 200
board[i][j] 为 'X' oder 'O'

Quelle: LeetCode
Link: https://leetcode.cn/problems/surrounded-regions
Das Urheberrecht liegt beim LeetCode Network. Für kommerzielle Nachdrucke wenden Sie sich bitte an die behördliche Genehmigung, für nichtkommerzielle Nachdrucke geben Sie bitte die Quelle an.

class Solution {
    int n;
    int m;
   public void solve(char[][] board) {
        n = board.length;
        m = board[0].length;

        //将边界的元素调用dfs方法.
        for (int i = 0; i <= n - 1; i++) {
            dfs(board, i, 0);
            dfs(board, i, m - 1);
        }
        for (int i = 1; i <= m - 2; i++) {
            dfs(board, 0, i);
            dfs(board, n - 1, i);
        }

        //遍历二维数组,若被标记为A则为边界还原为O,否则改变为X.
        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';
                }
            }

        }
    }


    //标记边界及其连接的'O';
    public void dfs(char[][] board, int x, int y) {
        //递归边界,如果超过边界或者不为'O'.
        if (x < 0 || x > n - 1 || y < 0 || y > m - 1 || board[x][y] != 'O') {
            return;
        }
        board[x][y] = 'A';
        dfs(board, x + 1, y);
        dfs(board, x - 1, y);
        dfs(board, x, y + 1);
        dfs(board, x, y - 1);
    }

    
}

 

Guess you like

Origin blog.csdn.net/SIHUAZERO/article/details/128077619