加载中...
面试题 01.08-零矩阵(Zero Matrix LCCI)
发表于:2021-12-03 | 分类: 中等
字数统计: 493 | 阅读时长: 2分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/zero-matrix-lcci

英文原文

Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are set to 0.

 

Example 1:

Input: 
[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]
Output: 
[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]

Example 2:

Input: 
[
  [0,1,2,0],
  [3,4,5,2],
  [1,3,1,5]
]
Output: 
[
  [0,0,0,0],
  [0,4,5,0],
  [0,3,1,0]
]

中文题目

编写一种算法,若M × N矩阵中某个元素为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,然后利用第一行第一列作为标记,先清除非第一行或非第一列的数据,最后根据第一列第一列是否有0来清除第一行第一列。

class Solution {
    public void setZeroes(int[][] matrix) {
        boolean isFirstRowHaveZero = false;
        boolean isFirstColHaveZero = false;
        for(int i = 0; i < matrix.length; i++) {
            if (matrix[i][0] == 0) {
                isFirstColHaveZero = true;
            }
        }

        for(int j = 0; j < matrix[0].length; j++) {
            if (matrix[0][j] == 0) {
                isFirstRowHaveZero = true;
            }
        }

        for(int i = 1; i < matrix.length; i++) {
            for(int j = 1; j < matrix[i].length; j++) {
                if (matrix[i][j] == 0) {
                    matrix[0][j] = 0;
                    matrix[i][0] = 0;
                } 
            }
        }
        
        for(int i = 1; i < matrix.length; i++) {
            for(int j = 1; j < matrix[i].length; j++) {
                if (matrix[0][j] == 0 || matrix[i][0] == 0) {
                    matrix[i][j] = 0;
                } 
            }
        }

        for(int i = 0; i < matrix.length; i++) {
            if (isFirstColHaveZero) {
                matrix[i][0] = 0;
            }
        }

        for(int j = 0; j < matrix[0].length; j++) {
            if (isFirstRowHaveZero) {
                matrix[0][j] = 0;
            }
        }

    }
}

统计信息

通过次数 提交次数 AC比率
46794 75191 62.2%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
面试题 01.07-旋转矩阵(Rotate Matrix LCCI)
下一篇:
面试题 02.05-链表求和(Sum Lists LCCI)
本文目录
本文目录