今天继续刷leetcode,第73题,将矩阵中有零的元素的行和列全部设置为0
分析:
方法一:采用O(mn)的空间方法,很简单可以实现,初始化一个m*n的矩阵,先遍历行,如果有0,就将整行设置为0,再遍历列,如果有0,则将整列设置为0,最后将两个矩阵合并。
方法二:采用O(m+n)的空间方法,初始一个m+n长度的向量,然后遍历整个原始矩阵,如果为0,则将行向量设为0,对应的列也设置0,然后对整个数据进行遍历,如果行为0或者列为0,那么该原始重新复制为0
方法三:采用O(1)的空间方法,利用第一行和第一列作为0的标志,遍历右下部分的矩阵,如果为0,那么将对应的行和列的元素设为0,最后遍历整个矩阵,如果行和列为0,那么该元素为0。
附上c++代码方法三:
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int r=matrix.size();
int c=matrix[0].size();
bool row=false;
bool col=false;
for(int i=0;i<r;i++)
{
if(matrix[i][0]==0)
{
col=true;
break;
}
}
for(int j=0;j<c;j++)
{
if(matrix[0][j]==0)
{
row=true;
break;
}
}
for(int i=1;i<r;i++)
{
for(int j=1;j<c;j++)
{
if(matrix[i][j]==0)
{
matrix[i][0]=0;
matrix[0][j]=0;
}
}
}
for(int i=1;i<r;i++)
{
for(int j=1;j<c;j++)
{
if(matrix[i][0]==0 ||matrix[0][j]==0)
matrix[i][j]=0;
}
}
if(row)
{
for(int j=0;j<c;j++)
matrix[0][j]=0;
}
if(col)
{
for(int i=0;i<r;i++)
matrix[i][0]=0;
}
}
};
附上python代码方法二:
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
row=len(matrix)
col=len(matrix[0])
rows=[]
cols=[]
for i in range(row):
for j in range(col):
if matrix[i][j]==0:
rows.append(i)
cols.append(j)
for i in range(row):
for j in range(col):
if i in rows or j in cols:
matrix[i][j]=0
return matrix
附上python代码方法三:
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
row=False
col=False
rows=len(matrix)
cols=len(matrix[0])
for i in range(rows):
if matrix[i][0]==0:
col=True
break
for j in range(cols):
if matrix[0][j]==0:
row=True
break
for i in range(1,rows):
for j in range(1,cols):
if matrix[i][j]==0:
matrix[i][0]=0
matrix[0][j]=0
for i in range(1,rows):
for j in range(1,cols):
if matrix[i][0]==0 or matrix[0][j]==0:
matrix[i][j]=0
if row:
for j in range(cols):
matrix[0][j]=0
if col:
for i in range(rows):
matrix[i][0]=0
return matrix
本文详细解析了LeetCode第73题“将矩阵中有零的元素的行和列全部设置为0”的三种解法,包括O(mn)、O(m+n)和O(1)空间复杂度的方法,并提供了C++和Python的代码实现。
1907

被折叠的 条评论
为什么被折叠?



