刷力扣热题–第八天:73:矩阵置零
菜鸟第八天开始奋战敲代码,持之以恒,见证成长
1.题目简介
2.题目解答
这道题,题目说需要使用原地算法,我的理解是要对原矩阵进行修改,而不是生成一个新的矩阵来表示结果,那么这道题要做的就是根据每行和每列的0去更新整个矩阵的值,所以还是必须要去遍历一次整个矩阵,使用字典(哈希表)去存储包含0的行和列,并且还需要得到他的转置矩阵,根据字典存储的内容更新原矩阵和他的转置矩阵,最后通过对比两个矩阵,即原位置与转置后的位置值若相同则不变,不同则值为0,最终在原矩阵上更改,并返回结果(这里可返可不返).时间复杂度O(N2),空间复杂度O(N2).
ok,真不错,一遍过!目前想不到更好的算法,先这样,明天继续!
3.心得体会
第一次做矩阵的题目,还没接触到更优秀的算法,所以先遍历吧,慢慢成长!忘记放代码了,代码在这:
class Solution(object):
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: None Do not return anything, modify matrix in-place instead.
"""
col_zero = [0 for i in range(len(matrix[0]))]
row_zero = [0 for i in range(len(matrix))]
matrix_t = [[0 for j in range(len(matrix))]for i in range(len(matrix[0]))]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
matrix_t[j][i] = matrix[i][j]
map_zero = {'i':[],'j':[]}
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] == 0:
map_zero['i'].append(i)
map_zero['j'].append(j)
for i in set(map_zero['i']):
matrix[i] = col_zero
for j in set(map_zero['j']):
matrix_t[j] = row_zero
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] == matrix_t[j][i]:
continue
else:
matrix[i][j] = 0
return matrix
4.做题时长
7月11日 7:45-8:40 总时长五十五分钟~