【leetcode刷题】20T37-矩阵置零

2020-03-28 20:45:38 浏览数 (1)

【题目】

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。

代码语言:javascript复制
示例 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) 的额外空间,但这仍然不是最好的解决方案。 你能想出一个常数空间的解决方案吗?

【思路】

使用额外两个数组存储需要清空的行号和列号,最后统一置0.

【代码】

python版本

代码语言:javascript复制
class Solution(object):
    def setZeroes(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: None Do not return anything, modify matrix in-place instead.
        """
        rows = []
        cols = set()
        for i in range(len(matrix)):
            current_cols = []
            for j in range(len(matrix[0])):
                if matrix[i][j] == 0:
                    current_cols.append(j)

            if len(current_cols) != 0:
                rows.append(i)
            cols.update(current_cols)

        for i in rows:
            # 一行转换为0
            for k in range(len(matrix[0])):
                matrix[i][k] = 0

        for j in set(cols):
            # 则一列转换为0
            for k in range(len(matrix)):
                matrix[k][j] = 0

0 人点赞