3月-73。マトリックスゼロ化

 

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        #空间复杂度1
        if not matrix or not matrix[0]:
            return
        M, N = len(matrix), len(matrix[0])
        row0, col0 = False, False
        for i in range(M):
            if matrix[i][0] == 0:
                col0 = True
        for j in range(N):
            if matrix[0][j] == 0:
                row0 = True
        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 row0:
            for j in range(N):
                matrix[0][j] = 0
        if col0:
            for i in range(M):
                matrix[i][0] = 0


        #空间复杂度m+n
        m, n = len(matrix), len(matrix[0])
        row, col = [False] * m, [False] * n

        for i in range(m):
            for j in range(n):
                if matrix[i][j] == 0:
                    row[i] = col[j] = True
        
        for i in range(m):
            for j in range(n):
                if row[i] or col[j]:
                    matrix[i][j] = 0


        #空间复杂度m*n
        row = len(matrix)
        col = len(matrix[0])
        index = []
        for i in range(row):
            for j in range(col):
                if matrix[i][j]==0:
                    index.append([i,j])
        for i,j in index:
            for x in range(col):
                matrix[i][x]=0
            for y in range(row):
                matrix[y][j]=0
  • スペースの複雑さm * n * 2
    • 2次元マトリックスを使用して、0位置のインデックスを記録します
    • 次に、この2次元配列をトラバースして、元の行列のゼロ以外の要素を0に設定します。
  • スペースの複雑さm + n
    • 行と列の領域の2つの配列を使用して、変数を記録します
    • 現在の要素が0の場合、レコードの行と列は両方ともTrueです。
    • 次に、行列をトラバースします。行と列のいずれかの要素がTrueの場合、現在の位置を0として記録します。
    • 全体として、現在の要素は最初の列と最初の行を介して記録されます
  • スペースの複雑さ1
    • 2つの変数を使用して、行と列に0があるかどうかをそれぞれ記録します。
    • 最初の行と最初の列をそれぞれトラバースし、0がある場合はマークを付けます
    • 次に、配列を2回繰り返します
      • まず、現在の位置が0の場合、最初の列と最初の行の位置も0に設定されます。
      • 2番目;現在の位置の最初の行または最初の列に0がある場合は、現在の要素を0に設定します
    • 前に記録した変数を使用して、最初の行と最初の列に0があるかどうかを観察し、最初の行と最初の列を0に設定します。
    • 本質は最初の行と最初の列を使用してマークを付けることですが、今回はマークは変数を使用します

おすすめ

転載: blog.csdn.net/weixin_37724529/article/details/115083192