您的位置:首页 > 其它

Set Matrix Zeroes

2016-09-23 09:43 176 查看
leetcode第73题,要求将一个矩阵内所有零元素所在的行和列全部归零。要求尽可能低的空间复杂度。

低空间复杂度其实就是看如何处理零元素所在位置的记录问题,一开始我用了一个列表记录零元素的坐标位置,这种方法显然比较笨,如果零元素很多,那么这个开辟的内存空间就会逼近矩阵的大小,加上坐标是数值对,因此可能会远远超过矩阵本身。

另一种思路是,让出第一行和第一列,用来标记零元素的位置,一旦该行出现了零元素,就把第一行和第一列的元素归零,第二遍扫的时候只有看第一行和第一列的元素就可以开始归零的操作了。

还有一个细节问题,那就是第一行和第一列如果也有零元素,需要特殊处理,需要实现设置标记位,如果出现了要到最后把第一行第一列清零。

class Solution(object):
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
row = len(matrix)
column = len(matrix[0])

first_row = False
first_column = False

for i in range(row):
for j in range(column):
if matrix[i][j] == 0:
if i == 0:
first_row = True
if j == 0:
first_column = True

matrix[i][0] = 0
matrix[0][j] = 0

for i in range(1, row):
if matrix[i][0] == 0:
for j in range(1, column):
matrix[i][j] = 0
if first_column:
matrix[i][0] = 0

for j in range(1, column):
if matrix[0][j] == 0:
for i in range(1, row):
matrix[i][j] = 0
if first_row:
matrix[0][j] = 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: