题目
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
示例 1:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
提示:
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
− 2 31 -2^{31} −231 <= matrix[i][j] <= 2 31 2^{31} 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/set-matrix-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
- 一开始看到题的时候喊我用原地算法,我一脸懵。
- 虽然我不晓得这个算法,但是不妨碍我们做题
- 就是把0所在的行和列全部变为0,我们只需要用两个数组分别记录行和列就可以了
- 这样我们可以减少重复做无用功。
代码
void setZeroes(int** matrix, int matrixSize, int* matrixColSize){
int map1[matrixSize];
int map2[*matrixColSize];
for(int i=0;i<matrixSize;i++)
{
map1[i]=0;
}
for(int j=0;j<*matrixColSize;j++)
{
map2[j]=0;
}
for(int i=0;i<matrixSize;i++)
{
for(int j=0;j<*matrixColSize;j++)
{
if(matrix[i][j]==0)
{
map1[i]++;
map2[j]++;
}
}
}
for(int i=0;i<matrixSize;i++)
{
if(map1[i]>0)
{
for(int j=0;j<*matrixColSize;j++)
{
matrix[i][j]=0;
}
}
}
for(int j=0;j<*matrixColSize;j++)
{
if(map2[j]>0)
{
for(int i=0;i<matrixSize;i++)
{
matrix[i][j]=0;
}
}
}
}
注释
- 有大佬能讲解一下原地算法是什么意思