本文基于各个大佬的文章
上点关注下点赞,明天一定更灿烂!
前言
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 = False
col0_flag = False
# 找第一行是否有0
for j in range(col):
if matrix[0][j] == 0:
row0_flag = True
break
# 第一列是否有0
for i in range(row):
if matrix[i][0] == 0:
col0_flag = True
break
# 把第一行或者第一列作为 标志位
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)
# 置0
for i in range(1, row):
for j in range(1, col):
if matrix[i][0] == 0 or matrix[0][j] == 0:
matrix[i][j] = 0
if row0_flag:
for j in range(col):
matrix[0][j] = 0
if col0_flag:
for i in range(row):
matrix[i][0] = 0
三、本题收获
我还是更适合打暴力,y1s1
总结
只会打暴力,基础一团糟,明天再学吧老铁,别真学会了。