【leetcode刷题笔记】Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
题解:因为题目要求原地算法,所以我们只能利用矩阵第一行和第一列存放置零信息。
- 首先遍历第一行和第一列,看他们是否需要全部置零,用两个变量first_column_zero和first_row_zero来记录;
- 遍历矩阵,如果某个位置matrix[i][j]出现了0,就把matrix[i][0]和Matrix[0][j]置零;这一步虽然改变了第一行第一列的元素,但是是正确的,因为这一行对应的位置因为Matrix[i][j]处的0最后的确是要变成0的;
- 遍历矩阵,如果(i,j)处对应的(i,0)或者(0,j)处为0,那么这个元素就置零;
- 单独处理第一行第一列,根据第一步的变量first_column_zero和first_row_zero。
代码如下:
1 public class Solution { 2 public void setZeroes(int[][] matrix) { 3 int m = matrix.length; 4 int n = matrix[0].length; 5 boolean first_column_zero = false; 6 boolean first_row_zero = false; 7 8 for(int i = 0;i < m;i ++){ 9 if(matrix[i][0] == 0) 10 first_column_zero =true; 11 } 12 for(int i = 0;i < n;i ++){ 13 if(matrix[0][i] == 0) 14 first_row_zero = true; 15 } 16 17 for(int i = 1;i < m;i++){ 18 for(int j = 1;j < n;j ++){ 19 if(matrix[i][j]== 0){ 20 matrix[i][0] = 0; 21 matrix[0][j]= 0; 22 } 23 } 24 } 25 26 for(int i = 1;i < m;i++){ 27 for(int j = 1;j < n;j ++){ 28 if(matrix[i][0] == 0 || matrix[0][j]== 0 ) 29 matrix[i][j]= 0; 30 } 31 } 32 33 if(first_column_zero){ 34 for(int i = 0;i < m;i ++) 35 matrix[i][0] = 0; 36 } 37 if(first_row_zero){ 38 for(int i = 0;i < n;i ++) 39 matrix[0][i] = 0; 40 } 41 } 42 }
分类:
leetcode刷题总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了