73. 矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例 1:
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
解析
比较麻烦的一道题,倒是不难。
1、首先我们先标记第一行和第一列是否含有0
2、然后我们进行双重for循环遍历矩阵,遇到0就把行头和列头都变成0
3、我们遍历行头和列头,遇到0就把当前行列都变为0
4、我们由第一步中的结果考虑是否把首行和首列变成0
class Solution {
public void setZeroes(int[][] matrix) {boolean hang = false;
for(int j = 0 ; j < matrix[0].length;j++){
if(matrix[0][j]==0){
hang = true;
break;
}
}
boolean lie = false;
for(int i = 0 ; i < matrix.length;i++){
if(matrix[i][0]==0){
lie = true;
break;
}
}
for(int i = 0;i<matrix.length;i++){
for(int j = 0;j<matrix[0].length;j++){
if(matrix[i][j]==0){
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
for(int i = 1 ; i < matrix.length;i++){
if(matrix[i][0]==0){
for(int j = 1 ; j<matrix[0].length;j++){
matrix[i][j] = 0;
}
}
}
for(int j = 1 ; j < matrix[0].length;j++){
if(matrix[0][j]==0){
for(int i = 1;i<matrix.length;i++){
matrix[i][j] = 0;
}
}
}
if(hang){
for(int j = 0 ; j<matrix[0].length;j++){
matrix[0][j] = 0;
}
}
if(lie){
for(int i = 0 ; i < matrix.length;i++){
matrix[i][0] = 0;
}
}
}
}
注意:本文归作者所有,未经作者允许,不得转载