矩阵置零
2026年3月20日小于 1 分钟
矩阵置零
使用的方法
无
解题思路
- 首先,遍历矩阵的第一行和第一列,分别记录是否存在零。
- 接着,遍历矩阵的剩余部分,如果发现某个元素为零,则将该元素所在的行和列的第一个元素标记为零。
- 最后,根据第一行和第一列的标记,将对应的行和列置零。
代码实现
class Solution {
public void setZeroes(int[][] matrix) {
int rowCnt = matrix.length;
int colCnt = matrix[0].length;
// 记录第一行是否有0
boolean firstRowHasZero = false;
for(int col = 0; col < colCnt;col++){
if(matrix[0][col] == 0){
firstRowHasZero = true;
break;
}
}
// 记录第一列是否有0
boolean firstColHasZero = false;
for(int row = 0;row < rowCnt;row++){
if(matrix[row][0] == 0){
firstColHasZero = true;
break;
}
}
for(int row=1;row<rowCnt;row++){
for(int col=1;col<colCnt;col++){
if(matrix[row][col] == 0){
matrix[0][col] = matrix[row][0] = 0;
}
}
}
for(int row=1;row<rowCnt;row++){
for(int col=1;col<colCnt;col++){
if(matrix[0][col]== 0 || matrix[row][0]==0){
matrix[row][col] = 0;
}
}
}
if(firstRowHasZero){
for(int col = 0;col<colCnt;col++){
matrix[0][col] = 0;
}
}
if(firstColHasZero){
for(int row=0; row < rowCnt;row++){
matrix[row][0] = 0;
}
}
}
}