题目描述
编写一种算法,若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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
开始解题(python)
可以使用两个额外的列表分别记录需要清零的行和列的索引。首先遍历整个矩阵,将为0的元素的行和列的索引分别加入到对应的列表中。然后再次遍历整个矩阵,将需要清零的行和列对应的元素置为0。
具体的算法如下:
- 初始化两个空列表,分别用来记录需要清零的行和列的索引。
- 遍历整个矩阵,对于每一个元素,如果其值为0,则将其所在的行和列的索引分别加入到对应的列表中。
- 再次遍历整个矩阵,对于每一个元素,如果其所在的行或列的索引在对应的列表中,则将该元素置为0。
- 返回清零后的矩阵。
下面是使用Python实现的代码:
def setZeroes(matrix):
row_zeroes = [] # 记录需要清零的行的索引
col_zeroes = [] # 记录需要清零的列的索引
# 第一次遍历,记录需要清零的行和列的索引
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] == 0:
row_zeroes.append(i)
col_zeroes.append(j)
# 第二次遍历,将需要清零的行和列对应的元素置为0
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if i in row_zeroes or j in col_zeroes:
matrix[i][j] = 0
return matrix
# 测试示例
matrix1 = [
[1,1,1],
[1,0,1],
[1,1,1]
]
print(setZeroes(matrix1))
matrix2 = [
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
print(setZeroes(matrix2))
实际应用
这个函数的实际应用可以在处理矩阵数据时非常有用。以下是一些可能的应用场景:
- 图像处理:在图像处理中,可以使用该函数来清除图像中的噪点。将图像表示为一个矩阵,如果某个像素值为0,则将其所在的行和列清零,从而清除噪点。
- 数据分析:在数据分析中,经常需要对大量数据进行处理和转换。如果某个数据集中存在异常值,可以将数据集表示为一个矩阵,使用该函数将异常值所在的行和列清零,从而排除异常值对分析结果的影响。
- 矩阵运算:在进行矩阵运算时,可能会遇到某些元素为0的情况。使用该函数可以将0所在的行和列清零,避免零元素对计算结果产生不必要的影响。
总的来说,该函数可以帮助我们在处理矩阵数据时快速定位并清除某些不需要的元素,提高数据的准确性和处理效率。