一、题目
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。(直接在原矩阵上面修改)
示例:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
二、代码
2.1 解法一:数组记住位置
思路:
- 比较常规和简单,即用vector记住所有的0的位置,然后遍历数组即可。
- 空间复杂度:O(mn)(非常愚蠢的解法)
2.2 解法二:数组记住行列
思路:
- 将0的行和列都用数组记住,然后遍历即可。
- 时间复杂度:O(mn),空间复杂度:O(m+n)
2.3 解法三:用原矩阵代替数组
思路:
- 用原矩阵的第一行和第一列来代替行列数组,记住0出现的行和列,并将元素记为0,
- 由于第一行和第一列都发生了修改,所以必须要在遍历前,先统计一下第一行和第一列是否含有0
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int m=matrix.size(),n=matrix[0].size(