zoukankan      html  css  js  c++  java
  • *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?

    题解

    解法一:用额外空间

     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     }

    解法二:不需要额外空间

     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 }

    reference:http://www.cnblogs.com/springfor/p/3888003.html

  • 相关阅读:
    Hibernate4.0之HibernateSessionFactory源码详解
    Struts.xml中Action的method与路径的三种匹配方法
    codeforces B. Ohana Cleans Up
    codeforces C. Vanya and Scales
    Hibernate主键生成策略
    codeforces B
    FileUpload实现文件上传(包含多文件)
    structs2之多文件上传
    svn的安装与使用
    codeforces Soldier and Number Game(dp+素数筛选)
  • 原文地址:https://www.cnblogs.com/hygeia/p/4632486.html
Copyright © 2011-2022 走看看