Middle-题目125:130. Surrounded Regions

原创 2016年05月31日 20:21:04

题目原文:
Given a 2D board containing ‘X’ and ‘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, the board should be:
X X X X
X X X X
X X X X
X O X X
题目大意:
给出一个由’X’和’O’组成的数组,把所有被’X’围住的’O’都改成’X’。(在边缘的不用改)
题目分析:
DFS和BFS都行,只要对边缘的’O’搜索即可,搜索到的’O’都改成’B’,最后再遍历整个矩阵,把’O’改成’X’,把’B’改成’O’即可。(ac代码用的是BFS)
源码:(language:java)

public class Solution {
     private class Point {
        int x;
        int y;
        Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
    public void solve(char[][] board) {
        if (board == null || board.length == 0)
            return;
        int rows = board.length, columns = board[0].length;
        int[][] direction = { { -1, 0 }, { 1, 0 }, { 0, 1 }, { 0, -1 } };
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                if ((i == 0 || i == rows - 1 || j == 0 || j == columns - 1) && board[i][j] == 'O') {
                    Queue<Point> queue = new LinkedList<>();
                    board[i][j] = 'B';
                    queue.offer(new Point(i, j));
                    while (!queue.isEmpty()) {
                        Point point = queue.poll();
                        for (int k = 0; k < 4; k++) {
                            int x = direction[k][0] + point.x;
                            int y = direction[k][1] + point.y;
                            if (x >= 0 && x < rows && y >= 0 && y < columns && board[x][y] == 'O') {
                                board[x][y] = 'B';
                                queue.offer(new Point(x, y));
                            }
                        }
                    }
                }
            }
        }
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                if (board[i][j] == 'B')
                    board[i][j] = 'O';
                else if (board[i][j] == 'O')
                    board[i][j] = 'X';
            }
        }
    }
}

成绩:
12ms,beats 38.36%,众数7ms,9.03%
Cmershen的碎碎念:
好像也可以用并查集解决,但我搜到一份ac代码提交上去发现并不快,而且我也不是很熟悉并查集。就用了这份代码顺便复习下BFS的写法。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

相关文章推荐

LeetCode 130. Surrounded Regions (并查集)

LeetCode 130. Surrounded Regions (并查集)LeetCode 130 Surrounded Regions 并查集 问题描述 解题思路 参考代码 Tags: - B...

[Leetcode] 130. Surrounded Regions 解题报告

题目: Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by...

(LeetCode 130)Surrounded Regions(并查集)

Q: Given a 2D board containing ‘X’ and ‘O’, capture all regions surrounded by ‘X’.A region is captu...

leetcode——130——Surrounded Regions

Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captur...

Leetcode 130 Surrounded Regions

Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A r...

leetcoe || 130、Surrounded Regions

problem: Given a 2D board containing 'X' and 'O', capture all regions surrounded by '...

LeetCode 130. Surrounded Regions

逆向思维,从边缘的O出发(上下左右四排的O),进行DFS, 将这些'O'可达的所有点'O'都标记为'Z'(包括它们自身也标记为O), 这些'Z'最终都可以保持为'O'不变,而其他点应该都变成'X'. ...

130. Surrounded Regions\73. Set Matrix Zeroes

Surrounded Regions 题目描述 代码实现130. Surrounded Regions题目描述Given a 2D board containing ‘X’ and ‘O’ (the ...

利用BFS和DFS解决 LeetCode 130: Surrounded Regions

问题来源此题来源于LEETCODE,具体问题详见下面的链接 https://leetcode.com/problems/surrounded-regions/description/问题简述给定一个...
  • zjuPeco
  • zjuPeco
  • 2017年07月30日 12:23
  • 141

[leetcode] 130. Surrounded Regions

Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captur...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目125:130. Surrounded Regions
举报原因:
原因补充:

(最多只允许输入30个字)