73.矩阵置零 python

devtools/2025/1/15 12:21:20/

矩阵置零

  • 题目
    • 题目描述
    • 示例 1:
    • 示例 2:
    • 提示:
  • 题解
    • 思路分析
    • Python 实现代码
    • 代码解释
    • 提交结果

题目

题目描述

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

示例 1:

在这里插入图片描述

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]

示例 2:

在这里插入图片描述

输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

提示:

m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
- 2 31 2^{31} 231 <= matrix[i][j] <= 2 31 2^{31} 231 - 1

题解

思路分析

为了在不使用额外空间的情况下完成这个任务,我们可以利用矩阵的第一行和第一列来记录哪些行和列需要被置零。具体步骤如下:

  1. 检查第一行和第一列是否有零:我们需要单独检查第一行和第一列中是否包含零,因为稍后我们会用它们来存储其他行和列的信息。
  2. 标记需要置零的行和列:遍历整个矩阵,当发现某个元素为零时,将该元素所在的行的第一个元素和该元素所在的列的第一个元素设置为零。
  3. 根据标记置零:再次遍历矩阵(从最后一行开始,以避免覆盖第一行和第一列中的标记),如果某一行或某一列的第一个元素为零,则将整行或整列置零。
  4. 处理第一行和第一列:最后,根据第一步的结果决定是否需要将第一行或第一列置零。

Python 实现代码

python">def setZeroes(matrix):m, n = len(matrix), len(matrix[0])# Step 1: Check if the first row and first column contain zerosfirst_row_has_zero = any(matrix[0][j] == 0 for j in range(n))first_col_has_zero = any(matrix[i][0] == 0 for i in range(m))# Step 2: Mark rows and columns that need to be zeroedfor i in range(1, m):for j in range(1, n):if matrix[i][j] == 0:matrix[i][0] = 0matrix[0][j] = 0# Step 3: Set matrix elements to zero based on marksfor i in range(1, m):for j in range(1, n):if matrix[i][0] == 0 or matrix[0][j] == 0:matrix[i][j] = 0# Step 4: Handle first row and columnif first_row_has_zero:for j in range(n):matrix[0][j] = 0if first_col_has_zero:for i in range(m):matrix[i][0] = 0

代码解释

  1. 检查第一行和第一列:通过 any 函数检查第一行和第一列中是否存在零,并保存结果。
  2. 标记需要置零的行和列:遍历矩阵,对于每个为零的元素,将其对应的行首和列首元素也设为零。
  3. 根据标记置零:从矩阵的最后一个元素开始向前遍历,如果某一行或某一列的标志位为零,则将该行或该列的所有元素置零。
  4. 处理第一行和第一列:最后根据第一步的检查结果决定是否需要将第一行或第一列置零。

这种方法确保了我们只使用常数级别的额外空间(O(1)),并且有效地完成了原地算法的要求。

提交结果

在这里插入图片描述


http://www.ppmy.cn/devtools/150681.html

相关文章

【 PID 算法 】PID 算法基础

一、简介 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&#xff09;、Differential&#xff08;微分&#xff09;的缩写。也就是说&#xff0c;PID算法是结合这三种环节在一起的。粘一下百度百科中的东西吧。 顾名思义&#xff0c;…

小程序自定义底部tabbar,并且解决遮罩层无法遮挡住底部tabbar问题

一、根目录下新建文件夹 二、index.wxml <view><van-tabbar active"{{ active }}" active-color"#f2be8f" bind:change"onChange"><van-tabbar-item wx:for"{{list}}" wx:key"index" info"{{item.inf…

CSS语言的语法

CSS语言的语法与应用 CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;是一种用于描述网页文档外观的样式表语言。它主要用于网页的设计和布局&#xff0c;与HTML&#xff08;超文本标记语言&#xff09;相辅相成。通过CSS&#xff0c;我们可以控制网…

商用服务器密码机的加密技术与优势

在当今数字化时代&#xff0c;数据安全已成为企业运营中的关键环节。商用服务器密码机作为一种专门设计用于保护数据安全的硬件设备&#xff0c;通过其先进的加密技术和密钥管理机制&#xff0c;为企业提供了坚实的数据安全保障。本文将深入探讨商用服务器密码机的加密技术以及…

Django Admin 中为自定义操作添加权限控制

在 Django 开发中,Django Admin 是一个非常强大的工具,可以帮助我们快速管理后台数据。然而,默认的 Admin 功能可能无法完全满足我们的需求,尤其是当我们需要为某些操作添加权限控制时。本文将详细介绍如何在 Django Admin 中为自定义操作添加权限控制,确保只有经过授权的…

doc、pdf转markdown

国外的一个网站可以&#xff1a; Convert A File Word, PDF, JPG Online 这个网站免费的&#xff0c;算是非常厚道了&#xff0c;但是大文件上传多了之后会扛不住 国内的一个网站也不错&#xff1a; TextIn-AI智能文档处理-图像处理技术-大模型加速器-在线免费体验 https://…

apisix的etcd使用

apisix数据存储再etcd中&#xff0c;如果在使用route、consumer中&#xff0c;需要知道2者的对照关系&#xff0c;可以利用etcd存储数据。 1、在docker中查看etcd的值 docker exec -it etcd-server bash 2、通过前缀查询所有的key 查询所有数据 etcdctl get --prefix "…

手机与平板:勒索软件的“天然通道”

过去的两年中&#xff0c;63%的企业曾遭受勒索软件攻击。 随着全球媒体频频报道勒索软件威胁&#xff0c;这一话题引发了广泛关注。虽然勒索软件并非新生事物&#xff0c;但其受网络犯罪分子“青睐”的趋势却愈发显著。 为什么手机和平板成了目标&#xff1f; 当前&#xff0c…