Set Matrix Zeroes leetcode java

愛做飯的小瑩子發表於2014-08-03

題目

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 }

 

相關文章