题目描述
链接:点我
文章来源地址https://www.toymoban.com/news/detail-709055.html
题解
//法一 使用hashset记录有0的横纵坐标即可
class Solution {
public void setZeroes(int[][] matrix) {
HashSet<Integer> row = new HashSet<Integer>();
HashSet<Integer> col = new HashSet<Integer>();
for(int i = 0;i < matrix.length;i++){
for(int j = 0;j < matrix[i].length;j++){
if(matrix[i][j] == 0){
row.add(i);
col.add(j);
}
}
}
//更新
for(int i = 0;i < matrix.length;i++){
for(int j = 0;j < matrix[i].length;j++){
if(row.contains(i) || col.contains(j)){
matrix[i][j] = 0;
}
}
}
}
}
//法二,我也是看了题解才明白orz....... 此法的空间复杂度更小O(1)
class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length , n = matrix[0].length;
int flag = 0; //标记第0列是否有0,有为1
for(int i = 0;i < m;i++){
if(matrix[i][0] == 0) flag = 1;
for(int j = 1;j < n;j++){
//通过其他列更新第0列,其他行更新第0行
if(matrix[i][j] == 0) matrix[i][0] = matrix[0][j] = 0;
}
}
for(int i = m-1;i >= 0;i--){//防止每一列的第一个元素被提前更新,倒着遍历
for(int j = 1;j < n;j++){ //注意这里是从1开始
if(matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0;
}
}
if(flag == 1){ //更新第0列
for(int i =0;i < m; i++) matrix[i][0] = 0;
}
}
}
文章来源:https://www.toymoban.com/news/detail-709055.html
到了这里,关于力扣题解(73. 矩阵置零),带注释的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!