LeetCode 73. Set Matrix Zeroes(矩阵清零)

来源:互联网 发布:淘宝水弹枪合法吗 编辑:程序博客网 时间:2024/06/05 03:18

原题网址:https://leetcode.com/problems/set-matrix-zeroes/

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

click to show follow up.

Follow up:

Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?

方法一:使用行和列哈希。

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

方法二:将哈希映射到第一行和第一列,注意顺序问题。

public class Solution {    public void setZeroes(int[][] matrix) {        boolean top = false;        for(int j=0; j<matrix[0].length; j++) {            if (matrix[0][j] == 0) {                top = true;                break;            }        }                boolean left = false;        for(int i=0; i<matrix.length; i++) {            if (matrix[i][0] == 0) {                left = true;                break;            }        }        for(int i=1; i<matrix.length; i++) {            for(int j=1; j<matrix[i].length; j++) {                if (matrix[i][j] == 0) {                    matrix[i][0] = 0;                    matrix[0][j] = 0;                }            }        }        for(int i=1; i<matrix.length; i++) {            for(int j=1; j<matrix[i].length; j++) {                if (matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0;            }        }        if (top) Arrays.fill(matrix[0], 0);        if (left) {            for(int i=0; i<matrix.length; i++) matrix[i][0] = 0;        }    }}


0 0
原创粉丝点击