美文网首页
第二讲 数组和动态数组(3)——练习2:矩阵0变换

第二讲 数组和动态数组(3)——练习2:矩阵0变换

作者: 天涯海角之路 | 来源:发表于2020-05-28 08:39 被阅读0次

练习2:矩阵0变换

题目要求

给一个m*n的矩阵,如果有一个元素为0,则把该元素对应的行与列所有元素全部变为0。

分析

  1. 信息提取:遍历整个矩阵,记录下0元素的位置信息
  2. 变换操作:再次遍历,用0元素的位置信息来变换该矩阵
  3. 注意,防止原数据的信息提取与变换操作杂糅在一起
  4. 一个值得注意的点是以何种形式记录下0元素的位置信息,可以以0/1序列形式(官方代码)也可以直接记录下标(我的代码)

代码1——官方的

def zero(matrix):
    m = [None] * len(matrix)
    n = [None] * len(matrix[0])
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            if (matrix[i][j] == 0):
                m[i] = 1
                n[j] = 1
                
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            if (m[i] == 1 or n[j] == 1):
                matrix[i][j] = 0

#%%

matrix = [  [ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1 ],
            [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
            [ 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 ],
            [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
            [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ]

#%%

for x in matrix:
    print(x, sep=" ")

#%%

zero(matrix)
for x in matrix:
    print(x, sep=" ")

代码2——我的

def zero(matrix):
    z = []
    m = len(matrix)
    n = len(matrix[0])
    for i in range(m):
        for j in range(n):
            if matrix[i][j] == 0:
                z.append((i, j))

    for i in range(len(z)):
        p, q = z[i]
        matrix[p] = [0 for i in range(n)]
        for j in range(m):
            matrix[j][q] = 0

Tips

  1. 对二维list的某一行赋值和某一列赋值用的是不一样的操作
  2. 用len提取list的行列数

相关文章

网友评论

      本文标题:第二讲 数组和动态数组(3)——练习2:矩阵0变换

      本文链接:https://www.haomeiwen.com/subject/qaxrahtx.html