博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-leetcode-130-被围绕的区域
阅读量:4115 次
发布时间:2019-05-25

本文共 2252 字,大约阅读时间需要 7 分钟。

**题号: **130

**题目: **被围绕的区域
**难度: **中等
**内容: **给定一个二维的矩阵,包含 'X''O'( 字母 O )。

找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O''X' 填充。

示例:

X X X XX O O XX X O XX O X X

运行你的函数后,矩阵变为:

X X X XX X X XX X X XX O X X

解释:

被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的

'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是"相连"的。

class Solution:    def solve(self, board):        """        :type board: List[List[str]]        :rtype: void Do not return anything, modify board in-place instead.        """        if board:            queue = []            for index, i in enumerate(board[0]):                if i == "O":                    board[0][index] = "-"                    queue.append([0, index])            for index, i in enumerate(board[-1]):                if i == "O":                    board[len(board) - 1][index] = "-"                    queue.append([len(board) - 1, index])            for i in range(len(board)):                if board[i][0] == "O":                    board[i][0] = "-"                    queue.append([i, 0])            for i in range(len(board)):                if board[i][-1] == "O":                    board[i][len(board[0]) - 1] = "-"                    queue.append([i, len(board[0]) - 1])            while queue:                top = queue.pop(0)                x, y = top[0], top[1]                # 上下左右添加                if x - 1 > 0 and board[x - 1][y] == "O":                    board[x - 1][y] = "-"                    queue.append([x - 1, y])                if x + 1 < len(board) and board[x + 1][y] == "O":                    board[x + 1][y] = "-"                    queue.append([x + 1, y])                if y - 1 > 0 and board[x][y - 1] == "O":                    board[x][y - 1] = "-"                    queue.append([x, y - 1])                if y + 1 < len(board[0]) and board[x][y + 1] == "O":                    board[x][y + 1] = "-"                    queue.append([x, y + 1])            for i in range(len(board)):                for j in range(len(board[0])):                    if board[i][j] == "O":                        board[i][j] = "X"                    if board[i][j] == "-":                        board[i][j] = "O"

分析:

边上的O是安全的,从边上的O蔓延过去与它相连的O也是安全的

遍历四条边把安全的O标记出来,然后把所有未标记的O改X

总结:还是得多刷题,才能更有感觉!

转载地址:http://yvwpi.baihongyu.com/

你可能感兴趣的文章
python循环语句与C语言的区别
查看>>
Vue项目中使用img图片和background背景图的使用方法
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
关于无线PCB中 中50欧姆的特性阻抗的注意事项
查看>>
Spring的单例模式源码小窥
查看>>
后台服务的变慢排查思路(轻量级应用服务器中测试)
查看>>
MySQL中InnoDB事务的默认隔离级别测试
查看>>
微服务的注册与发现
查看>>