矩阵置零
Posted onlyandonly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了矩阵置零相关的知识,希望对你有一定的参考价值。
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例 1:
输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ]
示例 2:
输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] 输出: [ [0,0,0,0], [0,4,5,0], [0,3,1,0] ]
一开始我想的是找到所有带0的行和列 放到row[m]和col[n]里,这样需要m+n的额外空间。
后来看了别人的解后 发现可以把第一行第一列当做上面的row[m]和col[n]来用,当然这就需要先记录下首行首列是否要置0,这样只需要2个int的额外空间。
下面是是代码,写得比较散,但是便于理解,以后可以把它们合并起来。
void setZeroes(int** matrix, int matrixRowSize, int matrixColSize) { if(matrixRowSize==0||matrixColSize==0) return; int m=matrixRowSize; int n=matrixColSize; int i,j; int firstRow=0; int firstCol=0; for(i=0;i<m;i++) if(matrix[i][0]==0) { firstCol=1; break; } for(j=0;j<n;j++) if(matrix[0][j]==0) { firstRow=1; break; } for(i=1;i<m;i++) { for(j=1;j<n;j++) if(matrix[i][j]==0) { matrix[0][j]=0; matrix[i][0]=0; } } for(i=1;i<m;i++) { if(matrix[i][0]==0) { for(j=1;j<n;j++) matrix[i][j]=0; } } for(j=1;j<n;j++) { if(matrix[0][j]==0) { for(i=1;i<m;i++) matrix[i][j]=0; } } if(firstRow) { for(j=0;j<n;j++) matrix[0][j]=0; } if(firstCol) { for(i=0;i<m;i++) matrix[i][0]=0; } }
以上是关于矩阵置零的主要内容,如果未能解决你的问题,请参考以下文章