*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

 

 

你可能感兴趣的:(Matrix)