侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 675 篇文章
  • 累计创建 128 个标签
  • 累计收到 26 条评论

目 录CONTENT

文章目录

【模拟】零矩阵

GabrielxD
2022-09-30 / 2 评论 / 0 点赞 / 301 阅读 / 250 字
温馨提示:
本文最后更新于 2022-09-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

题目

面试题 01.08. 零矩阵


编写一种算法,若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]
]

解题

方法一:模拟

思路

使用两个数组(zeroRows, zeroCols)分别标记矩阵的某一行或者某一列是否应该全为 00,然后根据数组修改矩阵即可。

代码

class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length, n = matrix[0].length;
        boolean[] zeroRows = new boolean[m];
        boolean[] zeroCols = new boolean[n];
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (matrix[i][j] == 0) zeroRows[i] = zeroCols[j] = true;
            }
        }
        for (int i = 0; i < m; ++i) {
            if (zeroRows[i]) Arrays.fill(matrix[i], 0);
        }
        for (int i = 0; i < n; ++i) {
            if (zeroCols[i]) {
                for (int j = 0; j < m; ++j) matrix[j][i] = 0;
            }
        }
    }
}
0

评论区