当前位置: 首页 > news >正文

【leetcode hot 100 73】矩阵置零

解法一:(使用两个标记变量)用矩阵的第一行和第一列代替方法一中的两个标记数组(col、row[ ]:第几列、行出现0),以达到 O(1) 的额外空间。

  • 这样会导致原数组的第一行和第一列被修改,无法记录它们是否原本包含 0。因此我们需要额外使用两个标记变量分别记录第一行和第一列是否原本包含 0。
  • 在实际代码中,我们首先预处理出两个标记变量,接着使用其他行与列去处理第一行与第一列,然后反过来使用第一行与第一列去更新其他行与列,最后使用两个标记变量更新第一行与第一列即可。
class Solution {public void setZeroes(int[][] matrix) {int m=matrix.length, n=matrix[0].length;boolean row=false, col=false;// 判断第一行有没有0for(int i=0; i<n; i++){if(matrix[0][i]==0){row=true;}}// 判断第一列有没有0for(int i=0; i<m; i++){if(matrix[i][0]==0){col=true;}}// 判断数组中是否有0 -> ij都是从1开始for(int i=1;i<m;i++){for(int j=1;j<n;j++){if(matrix[i][j]==0){matrix[0][j]=0;matrix[i][0]=0;}}}// 第一行出现0的列+第一列出现0的行=0 -> ij都是从1开始for(int i=1;i<m;i++){for(int j=1;j<n;j++){if(matrix[i][0]==0 || matrix[0][j]==0){// 只要matrix[i][0]==0或者matrix[0][j]==0,则matrix[i][j]==0matrix[i][j]=0; }}}// 判断第一行第一列是否需要置零if(row){for(int i=0;i<n;i++){matrix[0][i]=0;}}if(col){for(int i=0;i<m;i++){matrix[i][0]=0;}}}
}

注意:

  • 同时涉及到ij时,ij都是从1开始 -> 只处理除了第一行和第一列的数
  • 只要matrix[i][0]==0或者matrix[0][j]==0,则matrix[i][j]==0

http://www.mrgr.cn/news/93342.html

相关文章:

  • PythonWeb开发框架—Flask工程创建和@app.route使用详解
  • Redis|集群 Cluster
  • 软考架构师笔记-存储管理
  • 【15】蚂蚁链产品与服务
  • AI绘画软件Stable Diffusion详解教程(6):文生图、提示词细说与绘图案例
  • java+jvm笔记
  • 【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)
  • SQL注入的原理及详细运用
  • 从0到1入门Linux
  • java 重点知识 — JVM存储模块与类加载器
  • 从0开始的操作系统手搓教程21:进程子系统的一个核心功能——简单的进程切换
  • Webpack分包与合包深度解析
  • Python 网络爬虫教程与案例详解
  • qt实践教学(编写一个代码生成工具)持续更新至完成———
  • HCIA-IP路由动态-RIP
  • c++里左值和右值
  • 带你从入门到精通——自然语言处理(五. 自注意力机制和transformer的输入部分)
  • SpringBoot系列之Spring AI+DeekSeek创建AI应用
  • JavaWeb-HttpServletRequest请求域接口
  • Kubernetes教程(四)Dockerfile构建镜像