一、题目:73. 矩阵置零
 
 二、题目解析:
解题步骤:注意题目要求原地算法–>利用矩阵的第一行和第一列记录矩阵需要置0的行和列,只要把0所在行和列的第一个位置置为0,
然后再根据第一行和第一列0的位置,对矩阵置0即可
- 定义两个boolean变量,遍历矩阵中第一行和第一列是否存在0,存在则置为true
 - 从二维数组中的第一行和第一列开始遍历是否存在0,存在则将当前元素所在行的第一个元素和所在列的第一个元素置为 0
 - 从二维数组中的第一行和第一列开始遍历,只要当前元素对应的第一行或第一列有一个元素为0,则将当前元素更新为 0
 - 最后根据两个boolean变量,判断是否需要将第一行和第一列置为0,需要则将该行或列置0即可
 
图示:

三、代码如下:
public int[][] setZero(int[][] matrix){
        int m = matrix.length;
        int n = matrix[0].length;
        boolean rowZero = false;
        boolean colZero = false;
        for(int i = 0;i < m; i++){
            //判断第一列是否存在0
            if(matrix[i][0] == 0){
                colZero = true;
            }
        }
        for (int j = 0 ;j < n; j++){
            //判断第一行是否存在0
            if(matrix[0][j] == 0){
                rowZero = true;
            }
        }
        for(int i = 1;i<m;i++){
            for(int j = 1; j<n;j++){
                if(matrix[i][j] == 0){
                    //如果当前元素等于 0,则将当前元素所在行的第一个元素和所在列的第一个元素置为 0
                    matrix[i][0] = matrix[0][j] = 0;
                }
            }
        }
        for(int i = 1;i<m;i++){
            for(int j = 1; j<n;j++){
                //只要当前元素对应的第一行或第一列有一个元素为0,则将当前元素更新为 0
                if(matrix[i][0] == 0 || matrix[0][j] ==0){
                    matrix[i][j] = 0;
                }
            }
        }
        if(rowZero){
            for (int i = 0; i < n; i++) {
                matrix[0][i] = 0;
            }
        }
        if(colZero){
            for (int i = 0;i < m;i++){
                matrix[i][0] = 0;
            }
        }
        return matrix;
    }
 
四、测试
 
五、结束













![[网络] TCP协议中的三次握手是什么?利用3次握手的SYN Flood DDOS攻击知道吗?](https://img-blog.csdnimg.cn/0ee1ce08946141269f4685c77820231b.png)


![从2022安洵杯[babyPHP]看Soap+CLRF造成SSRF漏洞](https://img-blog.csdnimg.cn/4ca03e203e9c4c4aa5fe6aae5167dcef.png)


