. - 力扣(LeetCode)

import copy  
from typing import List  
  
  
class Solution:  
def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:  
answer = copy.deepcopy(matrix)  
m, n = len(matrix), len(matrix[0])  
# 构建长度为n,值为-1的数组  
dp = [-1] * n  
  
# 构建一个数据结构,记录matrix中值为-1的位置  
positions = []  
  
for i in range(m):  
for j in range(n):  
if matrix[i][j] > dp[j]:  
dp[j] = matrix[i][j]  
if matrix[i][j] == -1:  
positions.append((i, j))  
  
# 遍历positions,将matrix中值为-1的位置的值设置为dp[j]  
for i, j in positions:  
matrix[i][j] = dp[j]  
  
return matrix  
  
# 官方的解题思路  
def modifiedMatrixOfficial(self, matrix: List[List[int]]) -> List[List[int]]:  
# 可以取得行与列,用列当第一层循环,行当第二层循环,然后用zd来记录当前列的最大值,然后遍历每一行,将当前列的最大值zd赋值给该列值为-1的元素,然后返回矩阵。  
n, m = len(matrix), len(matrix[0])  
for j in range(m):  
zd = -1  
for i in range(n):  
zd = max(zd, matrix[i][j])  
for i in range(n):  
if matrix[i][j] == -1:  
matrix[i][j] = zd  
return matrix  
  
# 我的扩展,将positions记录在一个列表中,然后遍历positions,将matrix中值为-1的位置的值设置为zd  
def modifiedMatrixMyExpand(self, matrix: List[List[int]]) -> List[List[int]]:  
n, m = len(matrix), len(matrix[0])  
for j in range(m):  
zd = -1  
positions = []  
for i in range(n):  
zd = max(zd, matrix[i][j])  
if matrix[i][j] == -1:  
positions.append((i, j))  
for x, y in positions:  
matrix[x][y] = zd  
return matrix