## Description

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. Example 1:

``````Input:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
Output:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
``````

Example 2:

``````Input:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
Output:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
``````

• 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?

`m x n`的矩阵中，如果一个元素为`0`，则将它所在的行和列都置为`0`

## Solution

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 `````` ``````func setZeroes(matrix [][]int) { // 用于保存第一行和第一列是否需要置0 firstRow, firstCol := false, false row := len(matrix) col := len(matrix[0]) // 检查第一列是否有0 for i := 0; i < row; i++ { if matrix[i][0] == 0 { firstCol = true break } } // 检查第一行是否有0 for i := 0; i < col; i++ { if matrix[0][i] == 0 { firstRow = true } } for i := 1; i < row; i++ { for j := 1; j < col; j++ { if matrix[i][j] == 0 { // 使用第一列标记当前行需要置0 matrix[i][0] = 0 // 使用第一行标记当前列需要置0 matrix[0][j] = 0 } } } // 检查第一列的标记 for i := 1; i < row; i++ { if matrix[i][0] == 0 { for j := 1; j < col; j++ { matrix[i][j] = 0 } } } // 检查第一行的标记 for j := 1; j < col; j++ { if matrix[0][j] == 0 { for i := 1; i < row; i++ { matrix[i][j] = 0 } } } // 将第一列置0 if firstCol { for i := 0; i < row; i++ { matrix[i][0] = 0 } } // 将第一行置0 if firstRow { for i := 0; i < col; i++ { matrix[0][i] = 0 } } }``````