73. 矩阵置零
给定一个 *m* x *n*
的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
示例 1:
1 | 输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] |
示例 2:
1 | 输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] |
提示:
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 - 1
进阶:
- 一个直观的解决方案是使用
O(*m**n*)
的额外空间,但这并不是一个好的解决方案。 - 一个简单的改进方案是使用
O(*m* + *n*)
的额外空间,但这仍然不是最好的解决方案。 - 你能想出一个仅使用常量空间的解决方案吗?
解题思路:
我们不能遇到0后直接对该行该列进行直接修改,因为这样后面出现的0会被“覆盖”,该0所对应的行和列就没有被置0。
解决办法是将出现0的行和列分别存放在标记数组中,再次遍历矩阵的时将对应出现行和列置为0.
解法1:
使用O(m + n)额外空间来作为标记数组,两遍遍历,第一遍找出存在0的行和列,第二遍根据第一遍找出来的行列对矩阵进行置零操作
1 | //需要O(m + n)空间的解法 |
解法1:
使用第一行第一列来作为标记数组,但这样潜在的问题是,如果第一行或者第一列本来就存在着0,那么我们需要额外对这一整行进行置0操作。
1 | //需要O(1)空间的解法 |