LeetCode第73题:矩阵置零(中等)

LeetCode第73题:矩阵置零(中等)

  • 题目:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
    在这里插入图片描述在这里插入图片描述
  • 解题思路:遍历数组,记录为0的位置坐标。根据坐标依次将行、列变为0。
class Solution {
    public void setZeroes(int[][] matrix) {
        //数组的行和列
        int D = matrix.length;
        int R = matrix[0].length;
        int num = D*R;
        //声明两个数组,记录位置
        int H[] = new int[num];
        int L[] = new int[num];
        int h = 0;
        int l = 0;
        for(int i=0;i<R;i++){
            for(int j=0;j<D;j++){
                if(matrix[j][i] == 0){
                    //记录坐标位置
                    H[h++] = j;
                    L[l++] = i;
                }
            }
        }
        int a = 0;
        int b = 0;
        //将行、列依次置为0
        while(a<h){
            int m = H[a++];
            for(int j=0;j<R;j++) matrix[m][j] = 0;
        }
        while(b<l){
            int n = L[b++];
            for(int i=0;i<D;i++) matrix[i][n] = 0;
        }
    }
}

在这里插入图片描述

  • 题解做法:用一个布尔型的变量记录第一列是否含有0。若其他位置的数为0,则将该行的第一个数和该列的第一个数变为0。遍历数组,根据行头和列头是否为0 ,判断当前位置是否为0。
class Solution {
    public void setZeroes(int[][] matrix) {
        boolean col0_flag = false;
        int row = matrix.length;
        int col = matrix[0].length;
        for (int i = 0; i < row; i++) {
            if (matrix[i][0] == 0) col0_flag = true;
            for (int j = 1; j < col; j++) {
                if (matrix[i][j] == 0) {
                    matrix[i][0] = matrix[0][j] = 0;
                }
            }
        }
        for (int i = row - 1; i >= 0; i--) {
            for (int j = col - 1; j >= 1; j--) {
                if (matrix[i][0] == 0 || matrix[0][j] == 0) {
                    matrix[i][j] = 0;
                }
            }
            if (col0_flag) matrix[i][0] = 0;
        }
    }
}

作者:powcai
链接:https://leetcode-cn.com/problems/set-matrix-zeroes/solution/o1kong-jian-by-powcai/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在这里插入图片描述

发布了79 篇原创文章 · 获赞 7 · 访问量 1366

猜你喜欢

转载自blog.csdn.net/new_whiter/article/details/104497570