LeetCode:将矩阵设置为零

问题描述 投票:0回答:2

逻辑:对于每个必须插入零的位置,除了已经是 0 的位置之外,我们还放置一个“无”。这样我们就可以跟踪零值并就地更新矩阵。最后我们将所有 None 替换为零。 问题: 为什么我的代码无法从矩阵中的所有位置删除 None 。它只会从几个地方删除。

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        
        for i in range(len(matrix)):
            for j in range(len(matrix[0])):
                if matrix[i][j] == 0:
                    for t in range(len(matrix[0])):
                        if matrix[i][t] != 0:
                            matrix[i][t] = None
                    
                    for k in range(len(matrix)):
                        if matrix[k][j] != 0:
                            matrix[k][j] = None
       
        for i in range(len(matrix)):
            for j in range(len(matrix)):
                if matrix[i][j] == None:
                    matrix[i][j] = 0

结果输出参见图片:

请帮忙,因为我很惊讶它不起作用。

python-3.x math matrix
2个回答
0
投票

比较第一组循环:

for i in range(len(matrix)):
    for j in range(len(matrix[0])):

致第二个:

for i in range(len(matrix)):
    for j in range(len(matrix)):

看到区别了吗?


0
投票

Python 中的暴力破解:

def setZeros(matrix: List[List[int]]) -> None:
    temp=[]
    m=len(matrix)
    n=len(matrix[0])
    for i in range(m):
        for j in range(n):
            if matrix[i][j]==0:
                temp.append([i,j])
    for i,j in temp:
        for a in range(n):
            matrix[i][a]=0
        for b in range(m):
            matrix[b][j]=0
    return matrix
#Time complexity:O(N^2) +O(N^3)
#space complexity:O(2*N)

Python 中的优化方法:

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        m=len(matrix)
        n=len(matrix[0])
        iszerorow=False
        iszerocol=False
        for i in range(n):# for first row
            if matrix[0][i]==0:
                iszerorow=True
        for i in range(m):# for first column
            if matrix[i][0]==0:
                iszerocol=True
        for i in range(1,m):
            for j in range(1,n):
                if matrix[i][j]==0:
                    matrix[0][j]=0# make first row zero
                    matrix[i][0]=0 # make first column zero
        for i in range(1,m):
            for j in range(1,n):
                if matrix[i][0]==0 or matrix[0][j]==0:# now make zero on respective row and column
                    matrix[i][j]=0
        if iszerorow==True:
            for i in range(n): # make for first row
                matrix[0][i]=0
        if iszerocol==True:
            for i in range(m):# make for first column
                matrix[i][0]=0
    
#Time complexity:O(N)+O(m)+O(N^2)+O(N^2)+O(N)+O(M)=O(N^2)
#space complexity:O(1)
© www.soinside.com 2019 - 2024. All rights reserved.