力扣题库刷题笔记73--矩阵置零
发布人:shili8
发布时间:2025-02-24 02:17
阅读次数:0
**力扣题库刷题笔记73 -- 矩阵置零**
### 题目描述给定一个 `m x n` 的整数矩阵 `matrix` 和一个整数 `target`, 将所有元素等于 `target` 的行和列都设置为零。
**示例1:**
输入:`matrix = [[0,1,2,0],[3,4,5,2],[6,7,8,9],[4,1,0,3]]`, `target =1`
输出:`[[0,0,0,0],[3,4,5,2],[6,7,8,9],[4,1,0,3]]`
**示例2:**
输入:`matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]`, `target =6`
输出:`[[1,2,3,4],[5,0,0,0],[9,0,0,0],[13,0,0,0]]`
### 解法#### 方法一:使用哈希表记录行和列索引
def setZeroes(matrix): m, n = len(matrix), len(matrix[0]) rows, cols = set(), set() for i in range(m): for j in range(n): if matrix[i][j] ==0: rows.add(i) cols.add(j) for row in rows: matrix[row] = [0]*n for col in cols: for i in range(m): matrix[i][col] =0 return matrix
#### 方法二:使用额外的空间记录行和列是否需要置零
def setZeroes(matrix): m, n = len(matrix), len(matrix[0]) rows = [False]*m cols = [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 return matrix
#### 方法三:使用原地置零的方法
def setZeroes(matrix): m, n = len(matrix), len(matrix[0]) is_row_zero = False for i in range(m): if matrix[i][0] ==0: is_row_zero = True for j in range(1, n): if matrix[i][j] ==0: matrix[0][j] =0 matrix[i][0] =0 for i in range(m): for j in range(n): if matrix[i][0] ==0 or matrix[0][j] ==0: matrix[i][j] =0 return matrix
### 总结本题目要求将所有元素等于 `target` 的行和列都设置为零。我们可以使用哈希表记录行和列索引、额外的空间记录行和列是否需要置零或原地置零的方法来解决这个问题。
每种方法都有其优缺点,例如:
* 使用哈希表记录行和列索引:时间复杂度为 O(m * n),空间复杂度为 O(min(m, n))。
* 使用额外的空间记录行和列是否需要置零:时间复杂度为 O(m * n),空间复杂度为 O(n)。
* 使用原地置零的方法:时间复杂度为 O(m * n),空间复杂度为 O(1)。
最终,选择哪种方法取决于具体的场景和需求。