题目:
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
示例 1:
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例 2:
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zero-matrix-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
首先,需要进行两次遍历,第一次遍历用来记录哪个元素为0,把这个元素的行和列的位置记录下来。
其次,我们进行第二次遍历,找到刚才记录行列位置的地方,全部都变为0。
最后,返回改变后的矩阵即可。
代码:
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
if(matrix.empty()==1 || matrix.size() == 0 || matrix[0].size()== 0)
return;
int m = matrix.size(), n = matrix[0].size();
int rows[m],columns[n];
memset(rows,0,sizeof(rows)); //用变量可以定义数组长度,但不可初始化
memset(columns,0,sizeof(columns)); //用memeset()函数赋数组初值全为0;(使用头文件string.h)
// 第一次遍历
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(matrix[i][j] == 0){
rows[i] = 1;
columns[j] = 1;
}
}
}
// 第二次遍历
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(rows[i] == 1 || columns[j] == 1)
matrix[i][j] = 0;
}
}
}
};
注:
1.memset函数
memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
头文件 <string.h>或 < cstringh >。