Python矩阵置零算法全解析
Python 矩阵置零问题解析
矩阵置零问题要求将矩阵中某个元素为零的行和列全部置零。这是一个经典的算法问题,常用于考察对矩阵操作的理解和实现能力。
问题描述
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。要求原地修改矩阵,即不使用额外的存储空间。
方法一:使用标记数组
通过两个标记数组分别记录需要置零的行和列。遍历矩阵,记录所有零元素的行和列。再次遍历矩阵,根据标记数组将对应行和列置零。
def setZeroes(matrix):
m, n = len(matrix), len(matrix[0])
rows, cols = [False] * m, [False] * n
for i in range(m):
for j in range(n):
if matrix[i][j] == 0:
rows[i] = True
cols[j] = True
for i in range(m):
for j in range(n):
if rows[i] or cols[j]:
matrix[i][j] = 0
方法二:原地标记
利用矩阵的第一行和第一列作为标记空间。首先检查第一行和第一列是否需要置零。遍历矩阵其余部分,将零元素的位置记录在第一行和第一列。根据标记置零。
def setZeroes(matrix):
m, n = len(matrix), len(matrix[0])
first_row_zero = any(matrix[0][j] == 0 for j in range(n))
first_col_zero = any(matrix[i][0] == 0 for i in range(m))
for i in range(1, m):
for j in range(1, n):
if matrix[i][j] == 0:
matrix[i][0] = 0
matrix[0][j] = 0
for i in range(1, m):
for j in range(1, n):
if matrix[i][0] == 0 or matrix[0][j] == 0:
matrix[i][j] = 0
if first_row_zero:
for j in range(n):
matrix[0][j] = 0
if first_col_zero:
for i in range(m):
matrix[i][0] = 0
方法三:优化空间复杂度
进一步优化空间复杂度,仅使用一个变量标记第一列是否需要置零。其余步骤与方法二类似。
def setZeroes(matrix):
m, n = len(matrix), len(matrix[0])
first_col_zero = False
for i in range(m):
if matrix[i][0] == 0:
first_col_zero = True
for j in range(1, n):
if matrix[i][j] == 0:
matrix[i][0] = 0
matrix[0][j] = 0
for i in range(1, m):
for j in range(1, n):
if matrix[i][0] == 0 or matrix[0][j] == 0:
matrix[i][j] = 0
if matrix[0][0] == 0:
for j in range(n):
matrix[0][j] = 0
if first_col_zero:
for i in range(m):
matrix[i][0] = 0
方法四:位运算优化
使用位运算记录需要置零的行和列。适用于矩阵规模较小的情况,但实际应用中较少使用。
def setZeroes(matrix):
m, n = len(matrix), len(matrix[0])
row_mask, col_mask = 0, 0
for i in range(m):
for j in range(n):
if matrix[i][j] == 0:
row_mask |= 1 << i
col_mask |= 1 << j
for i in range(m):
for j in range(n):
if (row_mask & (1 << i)) or (col_mask & (1 << j)):
matrix[i][j] = 0
总结
矩阵置零问题可以通过多种方法解决,每种方法在时间复杂度和空间复杂度上各有优劣。实际应用中,方法二和方法三因其原地修改的特性更为常用。理解这些方法的差异有助于在实际问题中选择合适的解决方案。
BbS.okane224.info/PoSt/1121_764771.HtM
BbS.okane225.info/PoSt/1121_888152.HtM
BbS.okane226.info/PoSt/1121_298499.HtM
BbS.okane227.info/PoSt/1121_088094.HtM
BbS.okane228.info/PoSt/1121_784506.HtM
BbS.okane229.info/PoSt/1121_951019.HtM
BbS.okane230.info/PoSt/1121_717223.HtM
BbS.okane231.info/PoSt/1121_272517.HtM
BbS.okane232.info/PoSt/1121_737518.HtM
BbS.okane233.info/PoSt/1121_016556.HtM
BbS.okane224.info/PoSt/1121_209698.HtM
BbS.okane225.info/PoSt/1121_699428.HtM
BbS.okane226.info/PoSt/1121_054000.HtM
BbS.okane227.info/PoSt/1121_658035.HtM
BbS.okane228.info/PoSt/1121_245427.HtM
BbS.okane229.info/PoSt/1121_312110.HtM
BbS.okane230.info/PoSt/1121_475032.HtM
BbS.okane231.info/PoSt/1121_763879.HtM
BbS.okane232.info/PoSt/1121_897431.HtM
BbS.okane233.info/PoSt/1121_260372.HtM
BbS.okane234.info/PoSt/1121_883834.HtM
BbS.okane235.info/PoSt/1121_088388.HtM
BbS.okane236.info/PoSt/1121_841451.HtM
BbS.okane237.info/PoSt/1121_543228.HtM
BbS.okane238.info/PoSt/1121_633399.HtM
BbS.okane239.info/PoSt/1121_999483.HtM
BbS.okane240.info/PoSt/1121_386075.HtM
BbS.okane241.info/PoSt/1121_445772.HtM
BbS.okane242.info/PoSt/1121_413719.HtM
BbS.okane243.info/PoSt/1121_251656.HtM
BbS.okane234.info/PoSt/1121_939880.HtM
BbS.okane235.info/PoSt/1121_760998.HtM
BbS.okane236.info/PoSt/1121_738501.HtM
BbS.okane237.info/PoSt/1121_563544.HtM
BbS.okane238.info/PoSt/1121_630790.HtM
BbS.okane239.info/PoSt/1121_009471.HtM
BbS.okane240.info/PoSt/1121_129376.HtM
BbS.okane241.info/PoSt/1121_877671.HtM
BbS.okane242.info/PoSt/1121_137748.HtM
BbS.okane243.info/PoSt/1121_511330.HtM
BbS.okane234.info/PoSt/1121_802145.HtM
BbS.okane235.info/PoSt/1121_690920.HtM
BbS.okane236.info/PoSt/1121_696861.HtM
BbS.okane237.info/PoSt/1121_972760.HtM
BbS.okane238.info/PoSt/1121_191469.HtM
BbS.okane239.info/PoSt/1121_790466.HtM
BbS.okane240.info/PoSt/1121_833055.HtM
BbS.okane241.info/PoSt/1121_657881.HtM
BbS.okane242.info/PoSt/1121_035920.HtM
BbS.okane243.info/PoSt/1121_095507.HtM
BbS.okane234.info/PoSt/1121_778281.HtM
BbS.okane235.info/PoSt/1121_559379.HtM
BbS.okane236.info/PoSt/1121_628900.HtM
BbS.okane237.info/PoSt/1121_031335.HtM
BbS.okane238.info/PoSt/1121_949525.HtM
BbS.okane239.info/PoSt/1121_097288.HtM
BbS.okane240.info/PoSt/1121_758038.HtM
BbS.okane241.info/PoSt/1121_645830.HtM
BbS.okane242.info/PoSt/1121_825499.HtM
BbS.okane243.info/PoSt/1121_013672.HtM
BbS.okane234.info/PoSt/1121_296872.HtM
BbS.okane235.info/PoSt/1121_489000.HtM
BbS.okane236.info/PoSt/1121_218725.HtM
BbS.okane237.info/PoSt/1121_142256.HtM
BbS.okane238.info/PoSt/1121_725475.HtM
BbS.okane239.info/PoSt/1121_760058.HtM
BbS.okane240.info/PoSt/1121_485007.HtM
BbS.okane241.info/PoSt/1121_110614.HtM
BbS.okane242.info/PoSt/1121_589364.HtM
BbS.okane243.info/PoSt/1121_113848.HtM
BbS.okane234.info/PoSt/1121_640195.HtM
BbS.okane235.info/PoSt/1121_191384.HtM
BbS.okane236.info/PoSt/1121_233810.HtM
BbS.okane237.info/PoSt/1121_934663.HtM
BbS.okane238.info/PoSt/1121_416134.HtM
BbS.okane239.info/PoSt/1121_224269.HtM
BbS.okane240.info/PoSt/1121_757312.HtM
BbS.okane241.info/PoSt/1121_610017.HtM
BbS.okane242.info/PoSt/1121_770644.HtM
BbS.okane243.info/PoSt/1121_424186.HtM

