¡Acostúmbrate a escribir juntos! Este es el día 14 de mi participación en el "Desafío de actualización de abril del nuevo plan diario de Nuggets", haga clic para ver los detalles del evento .
1. Descripción del problema
Dada una m x n
matriz, si un elemento es 0 , establezca todos los elementos en su fila y columna en 0 . Utilice un algoritmo en el lugar .
Enlace temático: Puesta a cero de matrices
En segundo lugar, los requisitos de la materia.
Ejemplo 1
输入: matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出: [[1,0,1],[0,0,0],[1,0,1]]
复制代码
Ejemplo 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]]
复制代码
visitar
1.数组
2.建议用时15~25min
复制代码
3. Análisis de problemas
Esta es una pregunta que examina la lógica del pensamiento de matriz Para una matriz dada al principio, primero se realiza un juicio de bucle.
Si la posición contiene 0, entonces para registrar esta posición, ¿qué registro se usa?
Podemos construir las dos matrices por separado.
vector<int>row(m),col(n);//行、列数组
复制代码
Almacene la posición 0, los datos de toda esta fila y columna.
Finalmente, recorra la fila y la columna donde se encuentra el elemento actual. Si se encuentra row[i]或者col[j]
que es igual a 1, entonces establezca el elemento en 0.
En cuarto lugar, la implementación de la codificación.
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int i,j,p=0,m=matrix.size(),n=matrix[0].size();//初始化数据
vector<int>row(m),col(n);//行、列数组
for(i=0;i<m;i++)//遍历求解位置
{
for(j=0;j<n;j++)
{
if(matrix[i][j]==0)
{
row[i]=col[j]=1;//暂存行、列
}
}
}
for(i=0;i<m;i++)//之前记录位置的行、列置为0
{
for(j=0;j<n;j++)
{
if(row[i]||col[j])
{
matrix[i][j]=0;
}
}
}
}
};
复制代码