LeetCode Online Judge 题目C# 练习 - 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.

 1         public static void SetMatrixZeros(List<List<int>> matrix)

 2         {

 3             bool col0 = false;

 4             for (int i = 0; i < matrix.Count; i++)

 5             {

 6                 for (int j = 0; j < matrix[i].Count; j++)

 7                 {

 8                     if (matrix[i][j] == 0)

 9                     {

10                         if (j == 0)

11                             col0 = true;

12                         else

13                         {

14                             matrix[i][0] = 0;

15                             matrix[0][j] = 0;

16                         }

17                     }

18                 }

19             }

20 

21             for (int j = 1; j < matrix[0].Count; j++)

22             {

23                 if (matrix[0][j] == 0)

24                 {

25                     for (int i = 1; i < matrix.Count; i++)

26                     {

27                         matrix[i][j] = 0;

28                     }

29                 }

30             }

31 

32             for (int i = 0; i < matrix.Count; i++)

33             {

34                 if (matrix[i][0] == 0)

35                 {

36                     for (int j = 1; j < matrix[i].Count; j++)

37                     {

38                         matrix[i][j] = 0;

39                     }

40                 }

41             }

42 

43             if (col0)

44             {

45                 for (int i = 0; i < matrix.Count; i++)

46                 {

47                     matrix[i][0] = 0;

48                 }

49             }

50         }

代码分析:

  上面代码的Space(1)的做法,最好的的做法。

  Space(m * n),最简单的做法是是, 建一个一样m * n 的矩阵,标记需要改为0的坐标。然后在loop一遍矩阵,在原矩阵改0

  Space (m + n), 稍好一点的做法, 建两个数组,row[], col[], 标记需要改为0的 行 和 列。然后在loop一遍两数组,在原矩阵改0

  Space (1),就是代码中的做法,在loop原矩阵的时候,把该 行 和 列的第一个元素标0, 在loop一遍行,一边列,改0。有个问题是,loop列的时候要去掉第一列,不然下面loop行的时候就会全变 0 了,所以用一个flag,标记第一列需要改0。

你可能感兴趣的:(LeetCode)