LeetCode100-73矩阵置零
本文基于各个大佬的文章
上点关注下点赞,明天一定更灿烂!
前言
Python基础好像会了又好像没会,所有我直接开始刷leetcode一边抄样例代码一边学习吧。本系列文章用来记录学习中的思考,写给自己看的,也欢迎大家在评论区指导~
您的每一条评论都会让我更有学习的动力。
一、分析题目
二、思路以及代码
不要啊,矩阵问题,这个我真的一点都找不到规律,虽然级别是中等,在我这边算难上加难。
我有个想法是这样的:因为是把同行同列置零,所有置零后相当于缩小了一个单位矩阵,每次看当前矩阵的第一行第一列有没有0,有的话就置零,缩小矩阵,没有的话看第二行第二列。不行不行我脑子又乱了,看题解吧,遇到困难就要放弃。73. 矩阵置零 - 力扣(LeetCode)
博主第一个用的算是打暴力了哈哈,喜欢喜欢
class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""row = len(matrix)col = len(matrix[0])row_zero = set()col_zero = set()for i in range(row):for j in range(col):if matrix[i][j] == 0:row_zero.add(i)col_zero.add(j)for i in range(row):for j in range(col):if i in row_zero or j in col_zero:matrix[i][j] = 0
第二个好像思路跟我开始的有点一样,利用矩阵本身的第一行和第一列作为“标记”或者“辅助存储空间”,来记录哪些行和哪些列需要被置为零。
class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""row = len(matrix)col = len(matrix[0])row0_flag = Falsecol0_flag = False# 找第一行是否有0for j in range(col):if matrix[0][j] == 0:row0_flag = Truebreak# 第一列是否有0for i in range(row):if matrix[i][0] == 0:col0_flag = Truebreak# 把第一行或者第一列作为 标志位for i in range(1, row):for j in range(1, col):if matrix[i][j] == 0:matrix[i][0] = matrix[0][j] = 0#print(matrix)# 置0for i in range(1, row):for j in range(1, col):if matrix[i][0] == 0 or matrix[0][j] == 0:matrix[i][j] = 0if row0_flag:for j in range(col):matrix[0][j] = 0if col0_flag:for i in range(row):matrix[i][0] = 0
三、本题收获
我还是更适合打暴力,y1s1
总结
只会打暴力,基础一团糟,明天再学吧老铁,别真学会了。