[Lintcode] Set Matrix Zeroes矩阵归零

来源:互联网 发布:java 线程间共享数据 编辑:程序博客网 时间:2024/05/17 23:55

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

Example

Given a matrix

[  [1,2],  [0,3]],

return
[
[0,2],
[0,0]
]

分析:为了节约空间,可以使用第一行/第一列来储存0.例如在i,j处遇到0,则只需要将i,0和0,j处均置为零,这样互换最终达到的效果是一样的。另外需要注意,这样操作需要先将第一行/第一列原有的0标记出来。否则最后无法判断第一行/第一列的0来自哪里。


public class Solution {    /**     * @param matrix: A list of lists of integers     * @return: Void     */    public void setZeroes(int[][] matrix) {        if(matrix.length == 0) return;        if(matrix[0].length == 0) return;                boolean row = false, col = false;        if(matrix[0][0] == 0) {            row = true;            col = true;        } else {            for(int i = 0; i < matrix.length; i++) {                if(matrix[i][0] == 0) {                    col = true;                    break;                }            }            for(int i = 0; i < matrix[0].length; i++) {                if(matrix[0][i] == 0) {                    row = true;                    break;                }            }        }                for(int i = 1; i < matrix.length; i++) {            for(int j = 1; j < matrix[0].length; j++) {                if(matrix[i][j] == 0) {                    matrix[i][0] = 0;                    matrix[0][j] = 0;                }            }        }                for(int i = 1; i < matrix.length; i++) {            if(matrix[i][0] == 0) {                for(int j = 1; j < matrix[0].length; j++) matrix[i][j] = 0;            } else {                if(matrix[0][0] == 0 || col) matrix[i][0] = 0;            }        }                for(int i = 1; i < matrix[0].length; i++) {            if(matrix[0][i] == 0) {                for(int j = 1; j < matrix.length; j++) matrix[j][i] = 0;            } else {                if(matrix[0][0] == 0 || row) matrix[0][i] = 0;            }        }                if(row || col) matrix[0][0] = 0;    }}



0 0
原创粉丝点击