leetcode 每日一题 73. 矩阵置零

记录行列

思路:

先遍历用额外的空间记录为0的行和列,再遍历将对应的行列置为0。

代码:

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        row = set()
        col = set()
        m = len(matrix)
        n = len(matrix[0])
        for i in range(m):
            for j in range(n):
                if matrix[i][j] == 0:
                    row.add(i)
                    col.add(j)
        for i in range(m):
            for j in range(n):
                if i in row or j in col:
                    matrix[i][j] = 0

不使用额外空间

思路:

遍历数组,如果遇到0将对应行列里非0元素变为一个足够小的数。再遍历一次,如果元素是那个足够小的数,将其置为0。

代码:

 

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

 

标记法

思路:

遍历用矩阵的第一行和第一列来标记当前行是否为0,当前列是否为0。

代码:

class Solution(object):
    def setZeroes(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: void Do not return anything, modify matrix in-place instead.
        """
        is_col = False
        R = len(matrix)
        C = len(matrix[0])
        for i in range(R):
            if matrix[i][0] == 0:
                is_col = True
            for j in range(1, C):
                if matrix[i][j]  == 0:
                    matrix[0][j] = 0
                    matrix[i][0] = 0
        for i in range(1, R):
            for j in range(1, C):
                if not matrix[i][0] or not matrix[0][j]:
                    matrix[i][j] = 0
        if matrix[0][0] == 0:
            for j in range(C):
                matrix[0][j] = 0
        if is_col:
            for i in range(R):
                matrix[i][0] = 0

 

posted @ 2020-06-11 13:42  nil_f  阅读(162)  评论(0)    收藏  举报