73. 矩阵置零
-
解题思路:如何原地,是困难点。我们可以使用原有的矩阵,来存放某些信息。原来的矩阵第一行,
matrix[0][i]
如果等于0,代表第i
列有0,原来的矩阵第一列,matrix[i][0]
如果等于0,代表第i
列有0。还有一个注意点,就是matrix[0][0]
代表什么?这是一个歧义的点,所以不存放数据,单独用两个变量,first_r
如果等于0,代表第0行有0,first_c
如果等于0,代表第0列有0。 -
代码
class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: # 使用第0行和第0列, 判断是否有0出现,然后再统一修改矩阵 # 例如,matrix[0][i] == 0,代表的是第i列有一个0 # matrix[i][0] == 0,代表的是第i行有一个0 r = len(matrix) c = len(matrix[0]) # 第0行和第1列的零的个数要分别统计,因为共用了matrix[0][0] first_r = -1 first_c = -1 for i in range(0, c, 1): # 统计第一行是否有0 if matrix[0][i] == 0: first_r = 0 break for i in range(0, r, 1): # 统计第一列是否有0 if matrix[i][0] == 0: first_c = 0 break # 统计其他的是否有0 for i in range(1, r, 1) : for j in range(1, c, 1): if matrix[i][j] == 0: matrix[i][0] = 0 matrix[0][j] = 0 # 开始改变矩阵 for i in range(1, r, 1): for j in range(1, c, 1): if matrix[i][0] == 0 or matrix[0][j] == 0: matrix[i][j] = 0 # 单独处理第0行和第0列 if first_c == 0: # 第一列 for i in range(0, r, 1): matrix[i][0] = 0 if first_r == 0: # 第一行 for j in range(0, c, 1): matrix[0][j] = 0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理