老卫带你学---程序员面试金典系列(7.清除行列)

7.清除行列

问题:

请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。

给定一个N阶方阵int[]mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内。

测试样例:

[[1,2,3],[0,1,2],[0,0,1]]
返回:[[0,0,3],[0,0,0],[0,0,0]]

解决:

思想:

我们只需要将包含0的行列下标记录在一个集合s,然后二次遍历矩阵,将包含与集合s的坐标元素清0

python代码:

class Clearer:
    def clearZero(self, mat, n):
        # write code here
        row_flag=set()
        col_flag=set()
        for i in range(n):
            for j in range(n):
                if(mat[i][j]==0):
                    row_flag.add(i)
                    col_flag.add(j)
        for x in range(n):
            for y in range(n):
                if (x in row_flag or y in col_flag):
                    mat[x][y]=0
        return mat

你可能感兴趣的:(程序员面试金典)