• 【1】【leetcode-130】 被围绕的区域


    (DFS思路对,写复杂了)

    给定一个二维的矩阵,包含 '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的题,我写的DFS比下面的太复杂了,

    链接:https://www.nowcoder.com/questionTerminal/c159db5028034aa595043a1a220a62dd
    来源:牛客网

    /*
     * 所有与四条边相连的O都保留,其他O都变为X
     * 遍历四条边上的O,并深度遍历与其相连的O,将这些O都转为*
     * 将剩余的O变为X
     * 将剩余的*变为O
     */
    public int rowNum = 0;
    public int colNum = 0;
    public void solve(char[][] board) {
        if(board == null || board.length <= 0|| board[0].length <= 0){
            return;
        }
        rowNum = board.length;
        colNum = board[0].length;
        for(int i = 0; i < colNum; i++){
            dfs(board, 0, i);
            dfs(board, rowNum-1, i);
        }
        for(int i = 0; i < rowNum; i++){
            dfs(board, i, 0);
            dfs(board, i, colNum-1);
        }
        for(int i = 0; i < rowNum; i++){
            for(int j = 0; j < colNum; j++){
                if(board[i][j] == 'O'){
                    board[i][j] = 'X';
                }
            }
        }
        for(int i = 0; i < rowNum; i++){
            for(int j = 0; j < colNum; j++){
                if(board[i][j] == '*'){
                    board[i][j] = 'O';
                }
            }
        }
    }
    private void dfs(char[][] board, int row, int col) {
        // TODO Auto-generated method stub
        if(board[row][col] == 'O'){
            board[row][col] = '*';
            if(row > 1){
                dfs(board, row-1, col);
            }
            if(col > 1){
                dfs(board, row, col-1);
            }
            if(row < rowNum-1){
                dfs(board, row+1, col);
            }
            if(col < colNum-1){
                dfs(board, row, col+1);
            }
        }
    }
  • 相关阅读:
    综合布线系统工程招标文件简述
    Python3 深浅拷贝
    Python3 使用基本循环实现多级目录(思路)
    Python3 列表,元组,字典,字符串知识小结
    Python3 适合初学者学习的银行账户登录系统
    Python3乘法口诀表(由上至下+由下至上)
    VBox on 14.04: Kernel driver not installed (rc=-1908) [duplicate]
    javaee+tomcat新特性,乱码问题
    javaee+tomcat新特性,乱码问题
    RecyclerView下拉加载集合越界问题
  • 原文地址:https://www.cnblogs.com/twoheads/p/10593436.html
Copyright © 2020-2023  润新知