1. 程式人生 > >Leetcode73 矩陣置零

Leetcode73 矩陣置零

已AC, 中等題

思路:

  1. 設定兩個集合,line_set,row_set分別存放矩陣中0所在的行和列,使用集合是避免重複遍歷
  2. 第一次遍歷二維陣列,將相應數字裝入集合
  3. 第二次遍歷將兩個集合裡的行列全部置零

我的這種方法雖然通過,但是可能與題意不是很符合,題目要求原地演算法,我額外佔用了集合的空間應該是屬於違規的,不借助額外空間也是可以的:

  • 每次遍歷遇到0就把他所在的行列置位其他數字或字元比如 ‘ t ’,因為置為零會影響下面的判斷,最後再遍歷一次把 ‘ t ’字元的都置為零即可
class Solution(object):
    def setZeroes(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: void Do not return anything, modify matrix in-place instead.
        """
        i_set = set()
        j_set = set()
        for i in xrange(len(matrix)):
            for j in xrange(len(matrix[i])):
                if matrix[i][j] == 0:
                    i_set.add(i)
                    j_set.add(j)
        for i in i_set:
            matrix[i]=[0]*len(matrix[i])
        for j in j_set:
            for i in xrange(len(matrix)):
                matrix[i][j]=0
        #return matrix