*LeetCode-Set Matrix Zeroes

来源:互联网 发布:in下载软件 编辑:程序博客网 时间:2024/05/14 11:33

可以用两个数组记录每一行 每一列是否有存在0 但是注意在记录的时候不能同时set 这样原来不是0的也要被set成0 最后就全变成0

然后再用一次扫描 假如这一行或者这一列有是0的 就把这一位set

public class Solution {    public void setZeroes(int[][] matrix) {        int col = matrix[0].length;        int row = matrix.length;        int [] rowArr = new int [ row ];        int [] colArr = new int [ col ];        for ( int i = 0; i < row; i ++ ){            for ( int j = 0; j < col; j ++ ){                if ( matrix[i][j] == 0 ){                    rowArr[i] = 1;                    colArr[j] = 1;                }            }        }        for ( int i = 0; i < row; i ++ ){            for ( int j = 0; j < col; j ++ ){                if ( rowArr[i] == 1 || colArr[j] == 1)                    matrix[i][j] = 0;            }        }            }}

还有一种省空间的方法 就是把那两个记录数组记录在每一行每一列的第一个数字那里

注意 首先左上角的那个既代表第一行又代表第一列 所以需要多用一个数字单独记录

并且最后set的过程要从后面来 否则第一行第一列就会被破坏了


void setZeroes(vector<vector<int> > &matrix) {    int col0 = 1, rows = matrix.size(), cols = matrix[0].size();    for (int i = 0; i < rows; i++) {        if (matrix[i][0] == 0) col0 = 0;        for (int j = 1; j < cols; j++)            if (matrix[i][j] == 0)                matrix[i][0] = matrix[0][j] = 0;    }    for (int i = rows - 1; i >= 0; i--) {        for (int j = cols - 1; j >= 1; j--)            if (matrix[i][0] == 0 || matrix[0][j] == 0)                matrix[i][j] = 0;        if (col0 == 0) matrix[i][0] = 0;    }}


0 0
原创粉丝点击