Python题解Leetcode Hot100之矩阵

news2025/2/27 14:28:00

1. 矩阵置零

  • 题目描述
    给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
    在这里插入图片描述
  • 解题思路
    题目要求进行原地更改,也就是不能使用额外的空间,因此我们可以使用第一行的元素来记录对应的每一列是不是该置零,用第一列的元素来记录对应的每一行是不是该置零。但是这样的话就会有一个问题,就是第一行和第一列的元素会被覆盖,因此我们在覆盖第一行和第一列的元素前,需要额外的两个变量row_0_flag和col_0_flag来记录第一行和第一列是不是该置零。
    时间复杂度:O(m*n) 空间复杂度:O(1)
  • 代码
    class Solution:
        def setZeroes(self, matrix: List[List[int]]) -> None:
            """
            Do not return anything, modify matrix in-place instead.
            """
            m = len(matrix)
            if m == 0:
                return 
            n = len(matrix[0])
            # 在使用第一行和第一列进行记录之前,先把第一行和第一列是否需要置零给求出来
            row_0_flag = False
            for i in range(n):
                if matrix[0][i] == 0:
                    row_0_flag = True
                    break
            col_0_flag = False
            for i in range(m):
                if matrix[i][0] == 0:
                    col_0_flag = True
                    break
            # 使用第一行和第一列进行记录
            for i in range(1, m):
                for j in range(1, n):
                    if matrix[i][j] == 0:
                        matrix[i][0] = 0
                        matrix[0][j] = 0
            for i in range(1, m):
                for j in range(1, n):
                    if (matrix[i][0] == 0 or matrix[0][j] == 0) and matrix[i][j] != 0:
                        matrix[i][j] = 0
            if row_0_flag:
                for i in range(n):
                    matrix[0][i] = 0
            if col_0_flag:
                for i in range(m):
                    matrix[i][0] = 0
    

2. 螺旋矩阵

  • 题目描述
    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
    在这里插入图片描述
  • 解题思路
    1. 首先确认螺旋的圈数,圈数是(min(m, n) + 1) // 2,也就是最外层的循环数。
    2. 在每一圈中,我们需要分别从左到右,从上到下,从右到左,从下到上四个方向遍历,在解题时可以现在纸上把每个方向遍历的起始位置和终止位置写出来,这样就很容易写出代码。
    3. 注意在从右往左、从下到上遍历的时候,要判断是不是和从左往右、从上往下是不是一行,是一行的话就不用遍历了。
      时间复杂度:O(m*n) 空间复杂度:O(1)
  • 代码
    class Solution:
        def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
            m = len(matrix)
            n = len(matrix[0])
            iters = (min(m, n) + 1) // 2
            res = []
            for i in range(iters):
                # 从左往右打印
                for j in range(i, n - i):
                    res.append(matrix[i][j])
                # 从上往下打印
                for j in range(i + 1, m - i):
                    res.append(matrix[j][n - 1 - i])
                # 从右往左打印,此时要判断是不是和从左往右打印的是一行,是一行的话很明显就不用打印了
                if m - i - 1 > i:
                    for j in range(n - 2 - i, i - 1, -1):
                        res.append(matrix[m - i - 1][j])
                # 从下往上打印,此时要判断是不是和从上往下打印是一列,是一列的话很明显就不用打印了
                if i < n - 1 - i:
                    for j in range(m - i - 2, i, -1):
                        res.append(matrix[j][i])
            return res
    
    

3. 旋转图像

  • 题目描述
    给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

    你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

  • 解题思路
    先转置,再左右镜像

  • 代码

    class Solution:
        def rotate(self, matrix: List[List[int]]) -> None:
            """
            Do not return anything, modify matrix in-place instead.
            """
            n = len(matrix)
            # 转置
            for i in range(n):
                for j in range(i + 1, n):
                    matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
            # 左右镜像
            for i in range(n):
                l, r = 0, n - 1
                while l < r:
                    matrix[i][l], matrix[i][r] = matrix[i][r], matrix[i][l]
                    l += 1
                    r -= 1
    

4. 搜索二维矩阵 II

  • 题目描述
    编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

    每行的元素从左到右升序排列。
    每列的元素从上到下升序排列。
    在这里插入图片描述

  • 解题思路
    二分查找:从左上角开始搜索,小于target的话向下查找,大于target的话向左查找

  • 代码

    class Solution:
        def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
            m = len(matrix)
            n = len(matrix[0])
            i = 0
            j = n - 1
            while i < m and j >= 0:
                if matrix[i][j] == target:
                    return True
                elif matrix[i][j] > target:
                    j -= 1
                else:
                    i += 1
            return False
    

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

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

相关文章

64、基于去噪卷积神经网络的彩色图像去噪(matlab)

1、基于去噪卷积神经网络的彩色图像去噪的原理及流程 基于去噪卷积神经网络的彩色图像去噪是一种基于深度学习的图像处理技术&#xff0c;可以有效地去除图像中的噪声&#xff0c;提高图像的质量。下面是在Matlab中实现基于去噪卷积神经网络的彩色图像去噪的原理及流程&#x…

黑马头条-数据管理平台

目录 项目准备 验证码登录 验证码登录-流程 token 的介绍 个人信息设置和 axios 请求拦截器 axios 响应拦截器和身份验证失败 优化-axios 响应结果 发布文章-富文本编辑器 项目准备 技术&#xff1a; • 基于 Bootstrap 搭建网站标签和样式 • 集成 wangEditor 插件…

交易时你是否会考虑多种观点呢?

在交易过程中&#xff0c;考虑多种观点并融入多元化分析&#xff0c;是提升交易决策质量和最终交易结果的关键因素之一。 单一观点或分析方法往往容易受到个人偏见、情绪或信息局限性的影响。通过引入多元化分析&#xff0c;我们可以从不同角度审视市场&#xff0c;减少因主观…

汽车免拆诊断案例 | 2021款路虎揽胜运动版车遥控及一键起动功能失效

故障现象 一辆2021款路虎揽胜运动版车&#xff0c;搭载AJ20-P6H3L发动机&#xff0c;累计行驶里程约为2.5万km。车主反映&#xff0c;使用智能钥匙无法解锁车门&#xff0c;使用机械钥匙打开车门&#xff0c;进入车内&#xff0c;发现一键起动功能也失效&#xff1b;根据组合…

ABAP编程中,函数组与ABAP OO编程的相似性

任何面向对象模型的核心都是对象&#xff0c;它们包含属性&#xff08;数据&#xff09;和方法&#xff08;函数&#xff09;。 在传统的ABAP开发过程中&#xff0c;ABAP中对象的最接近等价物是函数模块和函数组。在ABAP编程中&#xff0c;函数组&#xff08;Function Group&am…

lnternet 发展史

一&#xff0c;lnternet 发展史 ARPA net &#xff08;上世纪50年代二战结束&#xff09; 无线 战场指挥通信协议落后 TCP/IP 包交换 WEB (70年代 ) 80年代 90年代 二&#xff0c;互联网的典型应用&#xff1a; 96年到2008年 第一代技术…

SwiftUI 中 Grid 内多个 NavigationLink 同时发生导航之诡异问题的解决

问题现象 不知小伙伴们发现了没有?在 SwiftUI 中如果有多个 NavigationLink 视图嵌入在 Grid(包括 LazyVGrid 和 LazyHGrid)容器中,点击其中任意一个 NavigationLink 都会导致所有导航一起发生。 如上图所示,点击 Grid 中任何一个 NavigationLink,所有 NavigationLink 都…

Golang | Leetcode Golang题解之第212题单词搜索II

题目&#xff1a; 题解&#xff1a; type Trie struct {children map[byte]*Trieword string }func (t *Trie) Insert(word string) {node : tfor i : range word {ch : word[i]if node.children[ch] nil {node.children[ch] &Trie{children: map[byte]*Trie{}}}nod…

【Dison夏令营 Day 07】用 Python 和 Rich 制作 Wordle克隆(下篇)

在大流行期间&#xff0c;Wordle 在 Twitter 上还算比较流行的一款基于网络的益智游戏&#xff0c;要求玩家每天在六次或更短时间内猜出一个新的五个字母的单词&#xff0c;每个人得到的单词都是一样的。 在本教程中&#xff0c;你将在终端上创建自己的 Wordle 克隆。自 2021 …

java基于ssm+vue 病人跟踪治疗信息管理系统

1病人功能模块 病人登录进入病人跟踪治疗信息管理系统可以查看首页、个人中心、病例采集管理、预约管理、医生管理、上传核酸检测报告管理、上传行动轨迹管理、病人治疗状况管理等内容。 病例采集管理&#xff0c;在病例采集管理页面可以查看账号、姓名、住院号、入院时间、病…

华三多台交换机堆叠配置(环形组网)

组网架构 配置步骤 SW1的配置&#xff1a; irf member 1 priority 32 设置master的优先级为32 interfacec range Ten-GigabitEthernet1/0/49 to Ten-GigabitEthernet1/0/50 shutdown 关闭上述接口&#xff08;将其加入到堆叠口之前需要关闭&#xff0c;否则无法加入&a…

SpringBoot 项目整合 MyBatis 框架,附带测试示例

文章目录 一、创建 SpringBoot 项目二、添加 MyBatis 依赖三、项目结构和数据库表结构四、项目代码1、application.yml2、TestController3、TbUser4、TbUserMapper5、TestServiceImpl6、TestService7、TestApplication8、TbUserMapper.xml9、MyBatisTest 五、浏览器测试结果六、…

语音大模型引领自然交互新时代,景联文科技推出高质量语音大模型数据库

近期&#xff0c;OpenAI正式发布语音大模型GPT-4o&#xff0c;可以综合利用语音、文本和视觉信息进行推理&#xff0c;扮演一个个人语音交互助手。 在音频处理方面&#xff0c;它不仅能识别和转录多种口音和方言&#xff0c;改变语音的速度音调和振动&#xff0c;还能进行声音模…

中国桥梁空间分布数据

2020年中国桥梁空间分布数据&#xff0c;共包含102000余条数据。 数据属性表包括&#xff1a;地级市名、区县名、桥梁名称和经纬度。有shp和EXCEl两种格式数据。目前暂没有广西、广东和台湾三个省份数据。

新创建spring项目打包启动直接报错没有主清单

springboot程序打成jar包执行报错&#xff1a; 启用 repackage 目标&#xff1a; 将 true 注释以启用 repackage 目标。 这样会确保在构建过程中生成具有正确清单属性的可执行 JAR 文件。

石墨烯分散液制备方法众多 应用领域广泛

石墨烯分散液制备方法众多 应用领域广泛 石墨烯分散液指将石墨烯纳米片均匀分散在特定溶剂中制成的溶液。石墨烯分散液具有化学稳定性好、生物相容性好、热稳定性好等优势&#xff0c;未来有望在涂料、纤维制品、电池制造、油墨等领域获得广泛应用。 石墨烯分散液以石墨…

银河麒麟V10SP1Nginx代理转发故障socket() failed (24: Too many open files)修改操作系统ulimit值解决实战

银河麒麟V10SP1Nginx代理转发故障socket() failed (24: Too many open files)修改操作系统ulimit值解决实战 一、事故描述 Nginx转发失败&#xff0c;转发代理服务器宕机&#xff01; 翻看Nginx日志 /var/log/nginx日志大量报错如下&#xff1a; socket() failed (24: Too m…

sklearn(Python机器学习库)介绍

0 引言 Sklearn (全称 Scikit-Learn)是基于Python 编程语言的免费软件机器学习库。 Scikit-learn主要是用Python编写的,它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面API 的设计非常好,所有对象的接口简单,很适合新手上路。 Scikit-learn与许多其他Python库很好地…

Zookeeper:Zookeeper集群角色

文章目录 一、Leader选举二、Zookeeper集群角色 一、Leader选举 Serverid&#xff1a;服务器ID&#xff1b;比如有三台服务器&#xff0c;编号越大在选择算法中的权重越大。Zxid&#xff1a;数据ID&#xff1b;服务器中存放的最大数据ID&#xff0c;值越大说明数据越新&#x…

携手共筑爱的桥梁:引导接纳自闭症同学

在孩子的班级中&#xff0c;当自闭症儿童成为我们共同的一员时&#xff0c;作为老师和家长&#xff0c;我们肩负着特别的责任——引导孩子们以开放的心态接纳、善待并关爱他们。 首先&#xff0c;我们要以身作则&#xff0c;展现接纳与尊重。无论是老师还是家长&#xff0c;都…