力扣热题100道之73矩阵置零
解法
先遍历一遍所有的数组,定义一个行记录数组,和一个列记录数组,如果一个元素为0,将他的行和列数组对应的值变为1,再遍历数组,将行和列数组中为1的地方变为0。
题解中优化的解法:
1:将第一列和第一行作为标记的行和列,再定义两个变量分别标记第一行和第一列原来是否有0的标记
2:只记录第一列的,第一列的第一个元素可以记录第一行中是否有0。这种方法感觉纯纯没事找事,差这一点空间吗?差这一个变量的空间吗?
class Solution {public void setZeroes(int[][] matrix) {int ml=matrix.length;int nl=matrix[0].length;int[]row=new int[ml];int[]colnum=new int[nl];for(int i=0;i<ml;i++){for(int j=0;j<nl;j++){if(matrix[i][j]==0){row[i]=1;colnum[j]=1;}}}for(int i=0;i<ml;i++){for(int j=0;j<nl;j++){if(row[i]==1){matrix[i][j]=0;}if(colnum[j]==1){matrix[i][j]=0;}}}}
}
历史解法
这道题有点简单,并且题解的做法也还好,不难想到,一下子就做出来了。