给定一个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
//楼上的Java版本有点复杂,写了个简单点的。 publicclassClearer { publicint[][] clearZero(int[][] mat, intn) { // write code here boolean[] rowArray = newboolean[n]; boolean[] columnArray = newboolean[n]; //记录为0的位置,把相应的行列位置设为true for(inti=0; i<n;i++) { for(intj=0;j<n;j++) { if(mat[i][j]==0) { rowArray[i]=true; columnArray[j]=true; } } } //遍历找到之前记录的位置,把相应行列赋值为0 for(inti=0;i<n;i++) { for(intj=0;j<n;j++) { if(rowArray[i]||columnArray[j]) { mat[i][j] = 0; } } } returnmat; } }