Leetcode: Set Matrix Zeroes

来源:互联网 发布:东坡软件下载 编辑:程序博客网 时间:2024/06/06 17:27

题目链接:

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

题目大意:

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

解题思路:
因为题目要求最好不要额外的空间,也就是只能使用O(1) 的空间解决问题。做题遇到的问题是,如果遇到matrix[i][j]==0 的时候就更新正行或者整列的值为0,那么就将会影响后续的判断,不知道后面的0是由于前面更新所致还是原本的值就是0。所以为了不影响后续的判断,我们用矩阵的第0行和第0列去存贮,如下:

  • 当matrix[i][j]==0时,将matrix[0][j]=0,matrix[i][0]=0;
  • 特殊的是matrix[0][0] 一个值不能表示行和列两种情况,所以使用两个变量:boolean firstR ,firstC 表示开始行和开始列是否存在0的情况;
    也就是第一次遍历做好记录工作
  • 第二次遍历则将matrix[i][0]==0的行全部设置为0;将matrix[0][j] ==0的列全部设置为0
  • 最后根据firstR和firstC设置第0行和第0列的值;

代码如下:

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

运行效果

这里写图片描述

0 0
原创粉丝点击