力扣刷题记录9 矩阵 7道题

# 59、螺旋矩阵 II

思路
    循环遍历
        while 嵌套 while

注意
    边界条件
        每行/每列都是左开右闭区间
    最后一个元素
        n为奇偶的不同

区别
    matrix = [[0] * n] * n
    matrix = [[0 for _ in range(n)] for _ in range(n)]
    都能生成一个 n × n 的全零矩阵
    前者每行各个元素之间是独立的
    但是前者各行本质上是浅复制,改变某一行则全部行都一同改变
    后者各行之间是独立的,每行各个元素之间也是独立的

# 54、螺旋矩阵

思路
    同上

注意
    边界条件
        每行/列除了判断 i j 是否越界,还需要判断 m 是否越界?可优化
        当行列数均为奇但不相等时,最终结果会多一个数,删掉即可,节省判断流程
    最后一个元素
        行列数相等且为奇时特殊情况
        提前结束循环,否则会死循环,最终结果少一个数,再额外加上

# LCR 146、螺旋遍历二维数组

题目同上

注意
    矩阵行列数为零的特殊情况

# 36、有效的数独

思路
    分别判断行、列、九宫格即可

注意
    除法会将整型变成浮点,注意使用 int() 的位置

# 48、旋转图像

思路
    寻找旋转前后对应元素的坐标关系
        以每四个元素为一组(旋转后刚好构成一个循环)
        用一个额外变量存储初始值
        然后从外至内、从左至右(四个元素中的第一个)依次遍历即可
    两次翻转
        有点类似于旋转数组的题
        先上下水平翻转,再沿对角线翻转
        也只需要一个额外变量

注意
    四个一组时可以用四个额外变量存储(依次变换坐标值)
    也可以只用一个(提前算好四个坐标值)

# 74、矩阵置零

思路
    用额外数组存储某一行某一列是否含零
    用第一行第一列代替额外数组进行存储
        然后再用两个额外变量存储第一行第一列是否含零
    用一个额外变量存储第一列是否含零
        第一列第一个元素存储第一行是否含零
        第一列其他元素和第一行存储每一行和每一列是否含零

# 289、生命游戏

思路
    用额外矩阵存储每个细胞下一时刻的状态
        空间复杂度高(O(mn)),只需遍历一次矩阵
    用额外状态存储每个细胞下一时刻的状态
        如 2 表示 从 0 到 1,-1 表示 从 1 到 0
        空间复杂度低(O(1)),但需要遍历两次矩阵

生成全零矩阵的方法
    len(board) = n,len(board[0]) = m
    new_board = [[0 for _ in range(m)] for _ in range(n)]
    注意是先列数 m 后行数 n,即先是生成一行零,然后复制到每一行

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值