给定一个N阶方阵int[][](C++中为vector<vector><int>>)mat及其阶数n,若方阵中某个元素为0,则将其所在的行与列清零。返回改变后的int[][]方阵(C++中为vector<vector><int>>),保证n小于等于300,矩阵中的元素在nt范围内。</int></vector></int></vector>
测试样例:
[[1,2,3],[0,1,2],[0,0,1]]
返回:[[0,0,3],[0,0,0],[0,0,0]]
给定一个N阶方阵int[][](C++中为vector<vector><int>>)mat及其阶数n,若方阵中某个元素为0,则将其所在的行与列清零。返回改变后的int[][]方阵(C++中为vector<vector><int>>),保证n小于等于300,矩阵中的元素在nt范围内。</int></vector></int></vector>
[[1,2,3],[0,1,2],[0,0,1]]
返回:[[0,0,3],[0,0,0],[0,0,0]]
def clearZero(self, mat, n): # write code here tma = list(zip(*mat)) lis = [[0 for col in range(n)] for row in range(n)] for i in range(n): for j in range(n): if 0 not in mat[i]: #判定横列没有存在0 if 0 not in tma[j]: #判定竖列没有存在0 lis[i][j] = mat[i][j] return lis思路: 反向寻找横列都不为0的那个数字的位置. 然后放到全为0的***数组中.
class Clearer:
def clearZero(self, mat, n):
row=set()
col=set()
for i,v in enumerate(mat):
for j,k in enumerate(v):
if k==0:
row.add(i)
col.add(j)
for i in row:
for k in range(len(mat[0])):
mat[i][k]=0
for i in col:
for k in range(len(mat)):
mat[k][i]=0
return mat
class Clearer: def clearZero(self, mat, n): # write code here if not mat: return mat1 = zip(*mat) column = [] row = [] for i in range(n): if 0 in mat[i]: row.append(i) if 0 in mat1[i]: column.append(i) for each in row: mat[each] = [0]*n mat = zip(*mat) for each in column: mat[each] = [0]*n return zip(*mat)
# -*- coding:utf-8 -*- class Clearer: def clearZero(self, mat, n): if not mat: return [] m = len(mat[0]) vi = [False] * n vj = [False] * m for i in xrange(n): for j in xrange(m): if mat[i][j] == 0: vi[i] = True vj[j] = True for i in xrange(n): for j in xrange(m): if vi[i] or vj[j]: mat[i][j] = 0 return mat