[leetcode]矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
这个题目比较麻烦的在于要求使用原地算法,所以思路上是对需要置零的行和列进行一定的标记,而这个标记应该放在矩阵中,于是我们遍历两次矩阵,碰到一个0,就把该列的第一个以及该行的第一个置位0,然后再遍历一次矩阵,把打上标记的行和列置位0即可,这样做有个问题,就是第一行和第一列,它们的标记重合了,都是(0,0)这个元素,所以,把第一列的标记单独的拿出来,如果本身有0的话,就给它标记一下,然后,每行都从第二个元素开始遍历(因为第一个已经检查过了),第二次遍历的时候,先对第一行和第一列以外的数据进行修改,然后再分别对第一行和第一列进行修改,就可以了;
lass Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ r = len(matrix) l = len(matrix[0]) is_col = False for i in range(r): if matrix[i][0] == 0: is_col = True for j in range(1, l): if matrix[i][j] == 0: matrix[i][0] = 0 matrix[0][j] = 0 for i in range(1, r): for j in range(1, l): if matrix[i][0] == 0 or matrix[0][j] == 0: matrix[i][j] = 0 if matrix[0][0] == 0: for j in range(l): matrix[0][j] = 0 if is_col: for i in range(r): matrix[i][0] = 0
学习java的新手,尝试将学到的内容总结为博客,内容如有错误,欢迎指正,感激不尽。