LeetCode[python]マトリクスゼロ

1394 ワード

m x nのマトリクスが与えられ、要素が0の場合、行と列のすべての要素が0に設定されます.その場アルゴリズムを使用してください.
例1:

  : 
[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]
  : 
[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]

例2:
  : 
[
  [0,1,2,0],
  [3,4,5,2],
  [1,3,1,5]
]
  : 
[
  [0,0,0,0],
  [0,4,5,0],
  [0,3,1,0]
]

ステップ:
  • の直接的な解はO(mn)を用いた余分な空間であるが,これは良い解ではない.
  • 簡単な改良はO(m+n)の余分な空間を使用することであるが,これは依然として最良の解ではない.
  • 定数空間の解決策を考え出せますか?

  • 考え方:
    ここではO(m+n)の余分な空間法を与えて解決した.すなわち,ゼロが現れる位置を格納するためにzeroLineとzeroRowの2つのlistをそれぞれ定義する.
    コード:
    class Solution:
        def setZeroes(self, matrix):
            """
            :type matrix: List[List[int]]
            :rtype: void Do not return anything, modify matrix in-place instead.
            """
            lenRow = len(matrix[0])
            lenLine = len(matrix)
    
            zeroRow = [False] * lenRow
            zeroLine = [False] * lenLine
    
            for l in range(lenLine):
                for r in range(lenRow):
                    if matrix[l][r] == 0:
                        zeroRow[r] = True
                        zeroLine[l] = True
    
            for l in range(lenLine):
                if zeroLine[l] is True:
                    matrix[l] = [0] * lenRow
                else:
                    for r in range(lenRow):
                        if zeroRow[r] is True:
                            matrix[l][r] = 0
    
            return matrix