力扣:130. 被围绕的区域(Python3)

news2024/11/23 19:35:01

题目:

给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。

来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

示例:

示例 1:

输入:board = [["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' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。


示例 2:

输入:board = [["X"]]
输出:[["X"]]

解法:

首先分析题目,最后保留的O只可能从边界蔓延得到,所以遍历矩阵四周。

接着把遇到的每个O的坐标入队。

然后BFS,创建和矩阵相同大小的矩阵matrix,用来记录最后的O。取出队头坐标,记录,判断上下左右是否为O且尚未记录,如果是就入队,直到队空。

最后根据matrix修改矩阵。

代码:

class Solution:
    def solve(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        row = len(board) - 1
        col = len(board[0]) - 1
        rh = 1
        ch = 0
        flag = 1
        r = c = 0
        matrix = [[0] * (col + 1) for _ in range(row + 1)]
        q = []
        for _ in range(max(1, 2 * (row + 1 + col + 1) - 4)):
            if flag == 1:
                if board[r][c] == 'O' and matrix[r][c] == 0:
                    q.append((r, c))
                if c == col:
                    r += 1
                    flag = 2
                else:
                    c += 1
            elif flag == 2:
                if board[r][c] == 'O' and matrix[r][c] == 0:
                    q.append((r, c))
                if r == row:
                    c -= 1
                    flag = 3
                else:
                    r += 1
            elif flag == 3:
                if board[r][c] == 'O' and matrix[r][c] == 0:
                    q.append((r, c))
                if c == ch:
                    r -= 1
                    flag = 4
                else:
                    c -= 1
            else:
                if board[r][c] == 'O' and matrix[r][c] == 0:
                    q.append((r, c))
                if r != rh:
                    r -= 1
        while q:
            cur = q.pop(0)
            matrix[cur[0]][cur[1]] = 1
            try:
                if board[cur[0] - 1][cur[1]] == 'O' and matrix[cur[0] - 1][cur[1]] == 0:
                    q.append((cur[0] - 1, cur[1]))
            except IndexError:
                pass
            try:
                if board[cur[0]][cur[1] + 1] == 'O' and matrix[cur[0]][cur[1] + 1] == 0:
                    q.append((cur[0], cur[1] + 1))
            except IndexError:
                pass
            try:
                if board[cur[0] + 1][cur[1]] == 'O' and matrix[cur[0] + 1][cur[1]] == 0:
                    q.append((cur[0] + 1, cur[1]))
            except IndexError:
                pass
            try:
                if board[cur[0]][cur[1] - 1] == 'O' and matrix[cur[0]][cur[1] - 1] == 0:
                    q.append((cur[0], cur[1] - 1))
            except IndexError:
                pass
        for r in range(row + 1):
            for c in range(col + 1):
                if board[r][c] == 'O' and matrix[r][c] == 0:
                    board[r][c] = 'X'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1085205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线免费AI绘画工具

体验地址 点我进行AI绘画 使用 选择以文搜图进行绘画 提问 介绍 首先,我们来了解一下ChatGPT。作为一个人工智能语言模型,它可以自动回答你的问题、提供信息,并与你进行流畅的对话。它通过大量的训练数据和机器学习算法,学…

react–antd 实现TreeSelect树形选择组件,实现点开一层调一次接口

效果图: 注意: 当选择“否”,开始调接口,不要把点击调接口写在TreeSelect组件上,这样会导致问题出现,没有层级了 部分代码:

01Maven的工作机制: Maven作为依赖管理工具以及Maven作为构建管理工具

Maven的特点及其应用 Maven 是 Apache 软件基金会组织维护的一款专门为Java项目提供构建和依赖管理支持的工具 Maven 作为依赖管理工具 管理jar包的规模: 随着我们使用的框架数量越来越多以及框架的封装程度也越来越高,项目中使用的jar包也就越来越多 配置工程依…

自动化测试 —— Pytest fixture及conftest详解!

前言 fixture是在测试函数运行前后,由pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等等。fixture是pytest的精髓所在,类似u…

单值二叉树的判断——递归

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。 根左右 ——递归 代码: /*** Definition for a binary tree node.* struct TreeNode {* int v…

RobotFramework自动化测试框架的基础关键字

1.1.1 如何搜索RobotFramework的关键字 有两种方式可以快速的打开RIDE的关键字搜索对话框 1、选择菜单栏Tools->Search Keywords,然后会出现如下的关键字搜索对话框,这个对话框就类似提供了一个关键字的API的功能,提供了关键字的…

K8S:HPA pod水平自动伸缩

文章目录 一.HPA概念1.什么是HPA2.HPA原理 二.部署 metrics-server1.node节点上传镜像包2.master节点安装metrics-server 三.部署 HPA1.所有节点安装镜像2.master创建测试的 Pod 资源3.创建 HPA 控制器4.创建测试客户端容器5.弹性缩容 四.扩展1.资源限制 - Pod①资源限制的原理…

快速排序详解(递归实现与非递归实现)

目录 一、快速排序的基本思想 二、将序列划分成左右区间的常见方法 2.1hoare版本(动图解释代码实现) 2.2挖坑法 2.3前后指针法 三、快速排序的初步实现 四、快速排序的优化实现 4.1快排的特殊情况 4.2对区间划分代码的优化 4.3小区间优化 五、…

邮政编码,格式校验:@ZipCode(自定义注解)

目标 自定义一个用于校验邮政编码格式的注解ZipCode,能够和现有的 Validation 兼容,使用方式和其他校验注解保持一致(使用 Valid 注解接口参数)。 校验逻辑 有效格式 不能包含空格;应为6位数字; 不校验…

5G安卓核心板-MT6833/MT6853核心板规格参数

随着智能手机的不断发展,芯片技术在推动手机性能和功能方面发挥着关键作用。MT6833和MT6853安卓核心板是两款高度集成的基带平台,为LTE/5G/NR和C2K智能手机应用提供强大的处理能力和多样化的接口。 这两款安卓核心板都集成了蓝牙、FM、WLAN和GPS模块&…

CSS网页标题图案和LOGO SEO优化

favicon图标 将网页的头名字旁边放入一个图案 想将想要的图案切成png图片 然后把png图片转换成ico图案可以借助进行访问 将语法引用到head里面 SEO译为搜索引擎优化。是一种利用搜索引擎的规则提高网站有关搜索引擎的自然排名的方式 SEO的目的是对网站进行深度的优化&…

SQL Server 创建表

切换数据库,判断是否存在 --切换数据库 use DBTEST--判断表是否存在 --创建的所有表都可以在sys.boject中找到,所以这里在sys.objects中查找是否有名字为department的表并且type为U 即用户生成的表 if exists(select * from sys.objects where namedepa…

轻松制作SOP作业指导书:掌握流程,节省时间

企业启用标准作业程序sop能够将企业生产作业的操作步骤、技术经验以及要求用统一的格式描述记录下来,以此规范和指导日常的工作,sop这种形式对企业的长远发展和精益化生产有能够带来巨大的帮助。 制作sop作业指导书其一,能够把企业的技术、经…

uniapp +vue3 练习 首页页面展示 我的页面展示 登录展示 拨打固定的电话 页面跳转

uniapp拨打固定的电话 function Hotline() {// 拨打电话uni.makePhoneCall({phoneNumber: 19969547693})}页面跳转 //普通跳转function homepage() {uni.navigateTo({url: /pages/homepage/homepage});}//二、uni.redirectTo关闭当前页面,跳转到应用内的某个页面。…

图像滤波总结

中值滤波器 中值滤波器是一种常用的非线性滤波器,其基本原理是:选择待处理像素的一个邻域中各像素值的中值来代替待处理的像素。主要功能使某像素的灰度值与周围领域内的像素比较接近,从而消除一些孤立的噪声点,所以中值滤波器能够…

使用clip-path来画不同的形状,三角形,多边形,菱形,六边形等等

介绍 单词"clip path"的直译过来就是:裁剪路径 clip-path CSS 属性可以创建一个只有元素的部分区域可以显示的剪切区域。区域内的部分显示,区域外的隐藏。剪切区域是被引用内嵌的 URL 定义的路径或者外部 SVG 的路径。 也就是说&#xff0c…

LeetCode【11】 盛水最多的容器

题目: 分析: 1、双指针,储水为(R-L )* 二者较小高度,如题目,(9-2)* 7 49 2、双指针向中间靠,每次移动较矮的指针。 代码: public int maxArea(int[] height) {int l…

STC89C51基础及项目第15天:小车测速、添加语言识别控制

1. 小车测速的原理(281.126) 测速模块 用途: 广泛用于电机转速检测,脉冲计数,位置限位等。 逻辑: 有遮挡,输出高电平;无遮挡,输出低电平 接线 VCC 接电源正极 3.3 - 5VGND 接电源负…

YOLOv7改进:极简的神经网络模型 VanillaNet---VanillaBlock助力检测,实现暴力涨点 | 华为诺亚2023

💡💡💡本文属于原创独家改进:极简模块VanillaBlock,以极简主义的设计为理念,网络中仅仅包含最简单的卷积计算,去掉了残差和注意力模块,二次创新引入到YOLOv7中取得了不俗的效果。 极简模块VanillaBlock | 亲测在多个数据集实现涨点; 收录: YOLOv7高阶自研专…

【JAVA】最容易忽视的数据类型——枚举

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 前言 Java枚举是一个特殊的类一般表示一组常量,比如一年的 4个季节,一年的 12 个月份,一个星期的7天,方向有东南西北等。今天就让我们来学习一下在JAVA中这个特殊的类。 枚举 枚举是一…