zoukankan      html  css  js  c++  java
  • Set Matrix Zeroes leetcode java

    题目

    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?

    题解

    这道题是CC150 1.7上面的原题。可以看上面详尽的解释,我就不写了。

    代码如下:

     1     public void setZeroes(int[][] matrix) {
     2         int m = matrix.length;
     3         int n = matrix[0].length;
     4         
     5         if(m==0||n==0)
     6             return;
     7         int[] flagr = new int[m];
     8         int[] flagc = new int[n];
     9         
    10         for(int i=0;i<m;i++){
    11             for(int j=0;j<n;j++){
    12                 if(matrix[i][j]==0){
    13                     flagr[i]= 1; 
    14                     flagc[j]= 1;
    15                 }
    16             }
    17         }
    18         
    19         for(int i=0;i<m;i++){
    20             for(int j=0;j<n;j++){
    21                 if(flagr[i]==1||flagc[j]==1){
    22                     matrix[i][j]=0;
    23                 }
    24             }
    25         }
    26     }

    另一种方法是不需要额外空间的,代码来自discuss:

     1 public void setZeroes(int[][] matrix) {
     2     int rownum = matrix.length;
     3     if (rownum == 0)  return;
     4     int colnum = matrix[0].length;
     5     if (colnum == 0)  return;
     6 
     7     boolean hasZeroFirstRow = false, hasZeroFirstColumn = false;
     8 
     9     // Does first row have zero?
    10     for (int j = 0; j < colnum; ++j) {
    11         if (matrix[0][j] == 0) {
    12             hasZeroFirstRow = true;
    13             break;
    14         }
    15     }
    16 
    17     // Does first column have zero?
    18     for (int i = 0; i < rownum; ++i) {
    19         if (matrix[i][0] == 0) {
    20             hasZeroFirstColumn = true;
    21             break;
    22         }
    23     }
    24 
    25     // find zeroes and store the info in first row and column
    26     for (int i = 1; i < matrix.length; ++i) {
    27         for (int j = 1; j < matrix[0].length; ++j) {
    28             if (matrix[i][j] == 0) {
    29                 matrix[i][0] = 0;
    30                 matrix[0][j] = 0;
    31             }
    32         }
    33     }
    34 
    35     // set zeroes except the first row and column
    36     for (int i = 1; i < matrix.length; ++i) {
    37         for (int j = 1; j < matrix[0].length; ++j) {
    38             if (matrix[i][0] == 0 || matrix[0][j] == 0)  matrix[i][j] = 0;
    39         }
    40     }
    41 
    42     // set zeroes for first row and column if needed
    43     if (hasZeroFirstRow) {
    44         for (int j = 0; j < colnum; ++j) {
    45             matrix[0][j] = 0;
    46         }
    47     }
    48     if (hasZeroFirstColumn) {
    49         for (int i = 0; i < rownum; ++i) {
    50             matrix[i][0] = 0;
    51         }
    52     }
    53 }
  • 相关阅读:
    每日一题力扣23 链表排序 转数组 再放入
    每日一题力扣24
    每日一题力扣206
    每日一题力扣21 神奇的递归
    每日一题力扣430
    每日一题力扣19
    每日一题力扣445 链表转数组相加两数求和
    每日一题力扣2
    【20211102】有价值的东西,需要时间
    【20211103】连岳摘抄
  • 原文地址:https://www.cnblogs.com/springfor/p/3888003.html
Copyright © 2011-2022 走看看