1. 程式人生 > 其它 >13Django-在使用者註冊程式碼中完成手機驗證碼的比對

13Django-在使用者註冊程式碼中完成手機驗證碼的比對

給你一個 m x n 的矩陣 board ,由若干字元 'X' 和 'O' ,找到所有被 'X' 圍繞的區域,並將這些區域裡所有的'O' 用 'X' 填充。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/surrounded-regions
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。


官方題解從邊界向內擴充套件更簡單

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

class Solution {

    private int[] dx = {0, 1, 0, -1};

    private int[] dy = {1, 0, -1, 0};

    public void solve(char[][] board) {
        if (board == null || board.length == 0 || board[0].length == 0) {
            return;
        }
        Map<Character, Boolean> ok = new HashMap<>();

        int n = board.length, m = board[0].length;

        char idx = 0;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if (board[i][j] == 'O') {
                    idx++;
                    LinkedList<int[]> queue = new LinkedList<>();
                    queue.offer(new int[]{i, j});
                    board[i][j] = idx;
                    boolean isOk = true;

                    while (!queue.isEmpty()) {
                        int[] node = queue.poll();

                        for (int k = 0; k < 4; ++k) {
                            int x = dx[k] + node[0];
                            int y = dy[k] + node[1];
                            if (x < 0 || x >= n || y < 0 || y >= m) {
                                isOk = false;
                            } else if (board[x][y] == 'O') {
                                queue.offer(new int[]{x, y});
                                board[x][y] = idx;
                            }
                        }
                    }
                    ok.put(idx, isOk);
                }
            }
        }

        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if (ok.containsKey(board[i][j])) {
                    if (ok.get(board[i][j])) {
                        board[i][j] = 'X';
                    } else {
                        board[i][j] = 'O';
                    }
                }
            }
        }
    }
}
心之所向,素履以往 生如逆旅,一葦以航