题目:
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例 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]
解题设计:
第一遍遍历数组时先找到其中为0的元素,然后用两个数组记录下为0元素的两个下标,并将对应的值置为True or False(凭个人喜好),第二次遍历数组时根据两个数组找到同一行和同一列的元素,将其置为0。
踩到的坑:在刚开始运行代码时没有先定义row和column两个数组,直接就赋值了,就一直报了IndexError: list assignment index out of range这个错误,百度了之后发现是没有定义的原因,而后初始化了这两个数组,因为也没在意,所以就用常量初始化了它们的空间,提交的时候一旦测试数据过大,则会报错,所以在初始化这两个数组时还需要对每行进行一次遍历,将两个数组的空间初始化。
代码:
class Solution(object):
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
for q in range(len(matrix)):
row=[None]*(len(matrix))
column=[None]*(len(matrix[q]))
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if matrix[i][j]==0:
row[i]=True
column[j]=True
for m in range(len(matrix)):
for n in range(len(matrix[i])):
if (row[m]) or (column[n]):
matrix[m][n]=0