• [LeetCode]题解(python):130-Surrounded Regions


    题目来源:

      https://leetcode.com/problems/surrounded-regions/


    题意分析:

      给定给一个二维的板,这个板只包括‘X’和‘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’出发深度搜索,能搜到的‘O’用visit记录他有没有访问过。最后将所有没有visit过的'O'变成‘X’.


    代码(python):

     1 class Solution(object):
     2     def solve(self, board):
     3         """
     4         :type board: List[List[str]]
     5         :rtype: void Do not return anything, modify board in-place instead.
     6         """
     7         m = len(board)
     8         if m == 0:
     9             return
    10         n = len(board[0])
    11         visit = [[False for i in range(n)] for j in range(m)]
    12         def dfs(i,j):
    13             q = []
    14             q.append([i,j])
    15             while len(q) != 0:
    16                 tmp = q[0]
    17                 #print(tmp,visit[3][1],board[3][1])
    18                 q.pop(0)
    19                 #down,up,left,right
    20                 if tmp[0] - 1 > 0 and board[tmp[0] - 1][tmp[1]] == 'O' and visit[tmp[0]-1][tmp[1]] == False:
    21                     visit[tmp[0] -1][tmp[1]] = True
    22                     q.append([tmp[0] - 1,tmp[1]])
    23                 if tmp[0] + 1 < m and board[tmp[0] + 1][tmp[1]] == 'O' and visit[tmp[0]+1][tmp[1]] == False:
    24                     visit[tmp[0] +1][tmp[1]] = True
    25                     q.append([tmp[0] + 1,tmp[1]])
    26                 if tmp[1] - 1 > 0 and board[tmp[0]][tmp[1] - 1] == 'O' and visit[tmp[0]][tmp[1]-1] == False:
    27                     visit[tmp[0]][tmp[1] - 1] = True
    28                     q.append([tmp[0],tmp[1] - 1])
    29                 if tmp[1] + 1 < n and board[tmp[0]][tmp[1] + 1] == 'O' and visit[tmp[0]][tmp[1]+1] == False:
    30                     visit[tmp[0]][tmp[1]+1] = True
    31                     q.append([tmp[0],tmp[1]+1])
    32         for i in range(n):
    33             if visit[0][i] == False and board[0][i] == 'O':
    34                 visit[0][i] = True
    35                 dfs(0,i)
    36             if visit[m - 1][i] == False and board[m-1][i] == 'O':
    37                 visit[m-1][i] = True
    38                 dfs(m - 1,i)
    39         for j in range(m):
    40             if visit[j][0] == False and board[j][0] == 'O':
    41                 visit[j][0] = True
    42                 dfs(j,0)
    43             if visit[j][n - 1] == False and board[j][n - 1] == 'O':
    44                 visit[j][n - 1] = True
    45                 dfs(j,n - 1)
    46         for i in range(m):
    47             for j in range(n):
    48                 if board[i][j] == 'O' and not visit[i][j]:
    49                     board[i][j] = 'X'
    50 
    51         
    View Code
  • 相关阅读:
    自由职业一时爽,一直自由一直爽
    N+6 裁员裁出幸福感的背后
    你真的了解 Cookie 和 Session 吗?
    百亿级企业级 RPC 框架开源了!
    做一个有脑子的程序员
    Java 生态核心知识点整理
    关于第三方支付,看这篇文章就够了!
    程序员该不该主动提加薪?
    我是为何下定决心入行程序员的
    老程序员被新程序员拍在沙滩上?
  • 原文地址:https://www.cnblogs.com/chruny/p/5307135.html
Copyright © 2020-2023  润新知