LeetCode-矩阵置零

196 阅读1分钟

算法记录

LeetCode 题目:

  给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法


说明

一、题目

  给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法

二、分析

  • 题目其实很简单,难就难在需要在原地进行操作。
  • 我们首先需要建立这样的一个观念,如果说一个坐标的值为零,那么意味着他的横列边缘的点也要置为零。
  • 而一旦一行列的坐标为零,那么处在这个行列上的点都应该置为零。
  • 还要注意的是如果说本身边缘列存在零,那么整个边缘列都应该置为零。
class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length, n = matrix[0].length;
        boolean flag = false;
        for (int i = 0; i < m; i++) {
            if (matrix[i][0] == 0) {
                flag = true;
            }
            for (int j = 1; j < n; j++) {
                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++) {
                if (matrix[i][0] == 0 || matrix[0][j] == 0) {
                    matrix[i][j] = 0;
                }
            }
            if (flag) {
                matrix[i][0] = 0;
            }
        }
    }
}

总结

变换思维。