classSolution: defsetZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ m, n = len(matrix), len(matrix[0]) row0_flag = False col0_flag = False
# 1. 记录第一行和第一列是否本身包含 0 for j inrange(n): if matrix[0][j] == 0: row0_flag = True break for i inrange(m): if matrix[i][0] == 0: col0_flag = True break
# 2. 利用第一行和第一列充当标记位,记录剩余部分的 0 for i inrange(1, m): for j inrange(1, n): if matrix[i][j] == 0: matrix[i][0] = matrix[0][j] = 0
# 3. 根据标记位,将其余部分置零 for i inrange(1, m): for j inrange(1, n): if matrix[i][0] == 0or matrix[0][j] == 0: matrix[i][j] = 0
# 4. 最后处理第一行和第一列本身 if row0_flag: for j inrange(n): matrix[0][j] = 0 if col0_flag: for i inrange(m): matrix[i][0] = 0
defmain(): data = sys.stdin.read().strip().split() m, n = int(data[0]), int(data[1]) idx = 2 matrix = [] for i inrange(m): row = list(map(int, data[idx:idx+n])) matrix.append(row) idx += n
sol = Solution() result = sol.setZeroes(matrix) print(result)