73. 矩阵置零

class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length;
        if(m == 0) return;
        int n = matrix[0].length;
        boolean row0 = false, col0 = false; // 判断第一行有没有0 // 判断第一列有没有0;
        for(int i = 0; i < m; i++) {
            if(matrix[i][0] == 0) {
                col0 = true;
                break;
            }
        }
        // 判断第一列有没有0;
        for(int j = 0; j < n; j++) {
            if(matrix[0][j] == 0) {
                row0 = true;
                break;
            }
        }
        //在除去第一列与第一行的其他位置上如果有0,将这个位置对应的第一行第一列的那个元素置0
        for(int i = 1; i < m; i++) {
            for(int j = 1; j < n; j++) {
                if(matrix[i][j] == 0) {
                    matrix[0][j] = matrix[i][0] = 0;
                }
            }
        }
        // 以第一行第一列的0为参照将对应的行列全部置0:
        for(int i = 1; i < m; i++) {
            for(int j = 1; j < n; j++) {
                if(matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0;
            }
        }
        // 如果第一行第一列本来就有0, 将第一行或第一列全部置0
        if(col0) {
            for(int i = 0; i < m; i++) matrix[i][0] = 0;
        }
        if(row0) {
            for(int i = 0; i < n; i++) matrix[0][i] = 0;
        }
    }
}
原文地址:https://www.cnblogs.com/yonezu/p/13269299.html