算法题16:矩阵置零
题目描述:
给定一个m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。示例 1:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 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]]
思路:
通过两次遍历,分别获取到行和列为0的情况,然后再遍历一遍需要为0的位置改为0
遍历每一行、每一列,遇到为0的时候那么就可以通过list记录行和列为0的情况:这一行和这一列都是0
python:
class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ row_n = len(matrix) collum_n = len(matrix[0]) row_list = [False] * collum_n collum_list = [False] * row_n # 先遍历每一行 出现0的位置i 则整个row_list都是True,所有collum中i的位置都是True for row_i in range(row_n): for col_i in range(collum_n): if matrix[row_i][col_i] == 0: row_list[row_i] = True collum_list[col_i] = True # 根据row_list和collum_list位置赋值修改整个matrix for row_i in range(row_n): for col_i in range(collum_n): if row_list[row_i] == True: matrix[row_i][col_i] = 0 elif collum_list[col_i] == True: matrix[row_i][col_i] = 0
java:
class Solution { public void setZeroes(int[][] matrix) { int m = matrix.length, n = matrix[0].length; boolean[] row = new boolean[m]; boolean[] col = new boolean[n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (matrix[i][j] == 0){ row[i] = col[j] = true; } } } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++){ if (row[i] || col[j]) { matrix[i][j] =0; } } } } }

浙公网安备 33010602011771号