[LeetCode]73. Set Matrix Zeroes

来源:互联网 发布:看书的软件推荐 编辑:程序博客网 时间:2024/06/06 00:04

https://leetcode.com/problems/set-matrix-zeroes/

二维数组如果某一位置是0,那么将该行和该列都置为零,要求空间复杂度O(1)


记录首行和首列是否要置为零。然后遍历数组,如果是零,就把第一行、第一列对应位置置为零。然后行列均从1开始遍历整个数组,如果第一行、列对应位置为0,则把当前遍历到的位置置为零。最后按照之前记录的首行、列,置首行、列的值。



public class Solution {    public void setZeroes(int[][] matrix) {        if (matrix == null || matrix.length == 0) {            return;        }        boolean zeroRow = false;        boolean zeroCol = false;        for (int i = 0; i < matrix.length; i++) {            if (matrix[i][0] == 0) {                zeroCol = true;                break;            }        }        for (int i = 0; i < matrix[0].length; i++) {            if (matrix[0][i] == 0) {                zeroRow = true;                break;            }        }        for (int i = 0; i < matrix.length; i++) {            for (int j = 0; 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++) {            for (int j = 1; j < matrix[0].length; j++) {                if (matrix[0][j] == 0 || matrix[i][0] == 0) {                    matrix[i][j] = 0;                }            }        }        if (zeroRow) {            matrix[0] = new int[matrix[0].length];        }        if (zeroCol) {            for (int i = 0; i < matrix.length; i++) {                matrix[i][0] = 0;            }        }    }}


0 0
原创粉丝点击