leetccode-130-被围绕的区域

题目描述:

方法一:dfs

class Solution:
    def solve(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        if not board or len(board)<=2 or len(board[0])<=2:
            return
        row = len(board)
        col = len(board[0])
        def dfs(i,j):
            if i < 0 or j < 0 or i >= row or j >= col or board[i][j] != ‘O‘:
                return
            board[i][j] = ‘#‘
            dfs(i-1,j)
            dfs(i+1,j)
            dfs(i,j+1)
            dfs(i,j-1)

        for i in range(row):
            dfs(i,0)
            dfs(i,col-1)

        for j in range(col):
            dfs(0,j)
            dfs(row-1,j)
        for i in range(0, row):
            for j in range(0, col):
                if board[i][j] == ‘O‘:
                    board[i][j] = ‘X‘
                if board[i][j] == ‘#‘:
                    board[i][j] = ‘O‘

方法二:并查集

原文地址:https://www.cnblogs.com/oldby/p/11194038.html

时间: 2024-10-12 23:20:30

leetccode-130-被围绕的区域的相关文章

130被围绕的区域

题目:给定一个二维的矩阵,包含 'X' 和 'O'(字母 O).找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充. 来源:https://leetcode-cn.com/problems/surrounded-regions/ 法一:自己的代码 思路:先绕外围走一圈,将所有与外围相连的岛屿都标记为True,然后把bool数组中位置为False的置为‘X’,为了节省空间可以直接将外围的‘O’,改为‘A’,然后再替换. from typing import List c

算法-被围绕的区域

做面试题,做面试题! 题意: 给一个二维的矩阵,包含 'X' 和 'O', 找到所有被 'X' 围绕的区域,并用 '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 X O X X 这个题才开始看上去根本没有思路,根本就不知道从哪里下手才好.借鉴了其他人的思想,我才知道是怎么做的. 1.解题思路 这个题最重要的一个特点就是,我们需要将被围绕起来的O换成X

lintcode:被围绕的区域

被围绕的区域 给一个二维的矩阵,包含 'X' 和 'O', 找到所有被 'X' 围绕的区域,并用 '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 X O X X 解题参考岛屿的个数 然而我还是写不出来programcreek 有下面的一段话: This problem is similar to Number of Islands. In this pr

被围绕的区域 &#183; Surrounded Regions

[抄题]: 给一个二维的矩阵,包含 'X' 和 'O', 找到所有被 'X' 围绕的区域,并用 '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 X O X X [暴力解法]: 时间分析: 空间分析: [思维问题]: 找四周都是平原的盆地感觉不好找:可以尝试逆向思维,找开了口和外界有联系的盆地 "注水"的过程通过图形化抽象后再用数学表达出来是bf

【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' 最终都会被填充为

lintcode - 被围绕的区域

1 class Solution { 2 public: 3 /* 4 * @param board: board a 2D board containing 'X' and 'O' 5 * @return: nothing 6 */ 7 bool flag[220][220]; 8 vector<pair<int, int>> v; 9 const int dir[4][2] = {{0,1}, {1,0}, {0, -1}, {-1, 0}}; 10 int isChange

130. Surrounded Regions(周围区域问题 广度优先)(代码未完成!!)

Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A region is captured by flipping all 'O's into 'X's in that surrounded region. For example, X X X X X O O X X X O X X O X X After running your function, th

DFS+并查集思想求被围绕的区域

class Solution { private int[][] dir= {{0,-1},{-1,0},{0,1},{1,0}}; private boolean[][] used; public boolean isMove(char[][] board,int x,int y) { if(x>=0&&x<board.length&&y>=0&&y<board[0].length) return true; return fals

leet

# 题名1 两数之和    2 两数相加    3 无重复字符的最长子串    4 寻找两个有序数组的中位数    5 最长回文子串    6 Z 字形变换    7 整数反转    8 字符串转换整数 (atoi)    9 回文数    10 正则表达式匹配    11 盛最多水的容器    12 整数转罗马数字    13 罗马数字转整数    14 最长公共前缀    15 三数之和    16 最接近的三数之和    17 电话号码的字母组合    18 四数之和    19 删除链表