### 73. Set Matrix Zeroes



题目： 
<https://leetcode.com/problems/set-matrix-zeroes/>



难度 : Medium



思路：

Naive AC代码，一看类似那个 game of life，不用extra space，不用O(mn)，应该就是用状态转移机了（？），所以还是先naive AC把：

```
class Solution(object):
    def setZeroes(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: void Do not return anything, modify matrix in-place instead.
        """
        def setZero(i,j):
            for m in range(col):
                matrix[i][m] = 0
            for n in range(row):
                matrix[n][j] = 0


        row = len(matrix)
        col = len(matrix[0]) if row else 0

        newM = []
        for i in range(row):
            newM.append(matrix[i][:])


        for i in range(row):
            for j in range(col):
                if newM[i][j] == 0:
                    setZero(i,j)
```



`正确思路`：

一边遍历，一边将相应的行和列置为0是行不通的，会影响后面元素的遍历判断，所以要记录下哪些行和哪些列是要置为0的。为了节约空间，在原矩阵中借两条边，如果该行或者列要置为0，则把左边或者上边的相应位置置为0。如果左边和上边本来就有0，那么需要额外标记一下，最后把左边或者右边也全部置为0.





