Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
public class Solution { public void setZeroes(int[][] matrix) { //题目要求不使用额外空间,因此需要借助矩阵本身的空间来辅助存储, //这里借用了矩阵的第一行和第一列来辅助纪录该行或该列是否为0.由于第一行第一列自身发生了改变,再用两个变量记录第一行和第一列是否为 //0即可。 int rlen=matrix.length; int clen=matrix[0].length; int row=1; int col=1; for(int i=0;i<rlen;i++){ if(matrix[i][0]==0){ col=0; break; } } for(int i=0;i<clen;i++){ if(matrix[0][i]==0){ row=0; break; } } for(int i=1;i<rlen;i++){//注意:不需要特殊考虑第1行和第1列,因为只需保证原值即可!! for(int j=1;j<clen;j++){ if(matrix[i][j]==0){ matrix[i][0]=0; matrix[0][j]=0; } } } for(int i=1;i<rlen;i++){ for(int j=1;j<clen;j++){ if(matrix[i][0]==0||matrix[0][j]==0) matrix[i][j]=0; } } if(row==0){ for(int i=0;i<clen;i++){ matrix[0][i]=0; } } if(col==0){ for(int i=0;i<rlen;i++){ matrix[i][0]=0; } } } }
时间: 2024-10-13 06:35:32