[Leetcode] 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.

如果不用额外空间的话,可以把第一行与第一列作为标记行与标记列,但是得先确定第一行与第一列本身要不要设为0。

 1 class Solution {

 2 public:

 3     void setZeroes(vector<vector<int> > &matrix) {

 4         if (matrix.size() < 1) return;

 5         int row = matrix.size(), col = matrix[0].size();

 6         bool r0 = false, c0 = false;

 7         for (int i = 0; i < row; ++i) {

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

 9                 c0 = true; break;

10             }

11         }

12         for (int j = 0; j < col; ++j) {

13             if (matrix[0][j] == 0) {

14                 r0 = true; break;

15             }

16         }

17         for (int i = 1; i < row; ++i) {

18             for (int j = 1; j < col; ++j) {

19                 matrix[i][0] = (matrix[i][j] == 0) ? 0 : matrix[i][0];

20                 matrix[0][j] = (matrix[i][j] == 0) ? 0 : matrix[0][j];

21             }   

22         }

23         for (int i = 1; i < row; ++i) {

24             for (int j = 1; j < col; ++j) {

25                  matrix[i][j] = (matrix[i][0] == 0) ? 0 : matrix[i][j];

26                  matrix[i][j] = (matrix[0][j] == 0) ? 0 : matrix[i][j];

27             }   

28         }

29         for (int i = 0; i < row && c0; ++i)  matrix[i][0] = 0;

30         for (int j = 0; j < col && r0; ++j)  matrix[0][j] = 0;

31     }

32 };

 

 

你可能感兴趣的:(LeetCode)