美文网首页
第二讲 数组和动态数组(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