题目来源:

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


题意分析:

  给定给一个二维的板,这个板只包括‘X’和‘O’。将被‘X’包围的‘O’变成‘X’。比如:

  1. X X X X
  2. X O O X
  3. X X O X
  4. X O X X
    得到:
  1. X X X X
  2. X X X X
  3. X X X X
  4. 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'

[LeetCode]题解(python):130-Surrounded Regions的更多相关文章

  1. leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions

    两种方式处理已经访问过的节点:一种是用visited存储已经访问过的1:另一种是通过改变原始数值的值,比如将1改成-1,这样小于等于0的都会停止. Number of Islands 用了第一种方式, ...

  2. 130. Surrounded Regions(M)

    130.Add to List 130. Surrounded Regions Given a 2D board containing 'X' and 'O' (the letter O), capt ...

  3. [LeetCode] 130. Surrounded Regions 包围区域

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

  4. 【LeetCode】130. Surrounded Regions (2 solutions)

    Surrounded Regions Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A ...

  5. 【一天一道LeetCode】#130. Surrounded Regions

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  6. leetcode 130 Surrounded Regions(BFS)

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

  7. Leetcode 130. Surrounded Regions

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

  8. Java for LeetCode 130 Surrounded Regions

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

  9. Leetcode 130 Surrounded Regions DFS

    将内部的O点变成X input X X X XX O O X X X O XX O X X output X X X XX X X XX X X XX O X X DFS的基本框架是 void dfs ...

  10. 130. Surrounded Regions

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

随机推荐

  1. 汉诺塔VII(递推,模拟)

    汉诺塔VII Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  2. JS判断是否安装flash player及当前版本

    function flashChecker() { var hasFlash = 0; //是否安装了flash var flashVersion = 0; //flash版本 if(document ...

  3. Brew install for mac

    安装命令例如以下: curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --st ...

  4. IOS系列——NStimer

    Timer经常使用的一些东西 1. 初始化 timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@select ...

  5. 基于eclipse的mybatis映射代码自动生成的插件http://blog.csdn.net/fu9958/article/details/7521681

    基于eclipse的mybatis映射代码自动生成的插件 分类: JAVA 数据库 工具相关2012-04-29 00:15 2157人阅读 评论(9) 收藏 举报 eclipsegeneratori ...

  6. 未能找到类型名称"MembershipProvider"

    将用户管理程序部署到SharePoint 2013平台上,系统编译报错:未能找到类型名称"MembershipProvider",此类型已转发到程序集System.web.Appl ...

  7. swipe.js文档及用法

    最近的一个项目中使用到了swipe.js这个插件 感觉非常的好用的 官方网站 http://swipejs.com/ https://github.com/bradbirdsall/Swipe 简介 ...

  8. select实现选中跳转

    select选择后直接跳转到其他网站的三种方式     第一种: ************************** <html> <head> <meta http- ...

  9. SQL SERVER2012新分页方式 轉載

    SQL SERVER2012在ORDER BY 子句中加入了新元素offset,允许用户在排序完成的结果集中自定义输出行范围,大大简化了分页SQL的书写方式和效率. SQL SERVER2012在OR ...

  10. GUI练习——列出指定目录内容

    需求: 一个窗体里.在文本框输入路径后,摁回车键或者点击"转到"按钮后: 若路径合法,程序会自动在文本域里显示该路径下的文件目录:若路径非法,则弹出对话框,告之你路径非法.点击&q ...