首页 > 其他 > 详细

矩阵置零

时间:2021-03-01 23:24:33      阅读:49      评论:0      收藏:0      [点我收藏+]

给定一个m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。

def setZeroes1(matrix):
    """
    先找到0元素所在的行和列,然后再将对应的行或列置零,空间复杂度m+n
    """
    if not matrix:
        return
    
    rows = []
    cols = []
    m = len(matrix)
    n = len(matrix[0])
    for i in range(m):
        for j in range(n):
            if matrix[i][j] == 0:
                rows.append(i)
                cols.append(j)
                
    for i in range(m):
        for j in range(n):
            if i in rows or j in cols:
                matrix[i][j] = 0
                
                
def setZeroes2(matrix):
    """
    用每行和每列的第一个元素来存储该行有没有0,原地修改
    """
    if not matrix:
        return
    
    m = len(matrix)
    n = len(matrix[0])
    row_zero = False
    col_zero = False
    
    # 记录原来第一行有无0
    for j in range(n):
        if matrix[0][j] == 0:
            row_zero = True
            break
    
    # 记录原来第一列有无0
    for i in range(m):
        if matrix[i][0] == 0:
            col_zero = True
            break
    
    # 用第一行、第一列来做标志位
    for i in range(1, m):
        for j in range(1, n):
            if matrix[i][j] == 0:
                matrix[i][0] = 0
                matrix[0][j] = 0
                
    # 置零
    for i in range(1, m):
        for j in range(1, n):
            if matrix[i][0] == 0 or matrix[0][j] == 0:
                matrix[i][j] = 0
                
    if row_zero:
        for j in range(n):
            matrix[0][j] = 0
    
    if col_zero:
        for i in range(m):
            matrix[i][0] = 0

矩阵置零

原文:https://www.cnblogs.com/youguang369/p/14466427.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!