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 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM