3142. 判断矩阵是否满足条件

判断二维矩阵是否满足特定条件的最优解法解析

在日常刷题过程中,我们常常遇到各种关于二维矩阵的判断问题。本篇博客将带你一步步理解并实现一个非常有意思的矩阵验证问题:判断每个格子是否满足特定条件,并给出一套简单、高效的解决方案。


一、题目描述

给定一个大小为 m x n 的二维矩阵 grid,我们需要判断这个矩阵中的每一个格子 grid[i][j] 是否满足以下两个条件:

  1. 下方一致性条件:如果下面的格子存在(即 i + 1 < m),那么它需要和当前格子相等,即:
grid[i][j] == grid[i + 1][j]
  1. 右边不等条件:如果右边的格子存在(即 j + 1 < n),那么它需要和当前格子不相等,即:
grid[i][j] != grid[i][j + 1]

如果矩阵中所有格子都满足这两个条件,我们返回 True,否则返回 False


二、思路分析

这个问题的本质是对每个格子进行检查,看它与右边、下方格子的关系是否符合条件。由于每个格子只需要与固定两个方向(右,下)进行比较,我们可以直接使用双重循环,遍历每一个位置即可。

✅ 判断逻辑

对于坐标 (i, j)

  • 如果 j + 1 < n,即右边存在,判断是否与右边相等 → 不符合条件;
  • 如果 i + 1 < m,即下方存在,判断是否与下方不相等 → 不符合条件。

三、Python 实现(最优解)

from typing import List

class Solution:
    def satisfiesConditions(self, grid: List[List[int]]) -> bool:
        Rows = len(grid)
        Cols = len(grid[0])

        for r in range(Rows):
            for c in range(Cols):
                # 条件1:当前格子不能和右边相等
                if c < Cols - 1 and grid[r][c] == grid[r][c + 1]:
                    return False

                # 条件2:当前格子必须和下面相等
                if r < Rows - 1 and grid[r][c] != grid[r + 1][c]:
                    return False

        return True

四、优化建议(更 Pythonic)

虽然上面的代码已经很简洁高效了,但我们可以进一步优化,使其更“Pythonic”,例如省略变量名简化:

class Solution:
    def satisfiesConditions(self, grid: List[List[int]]) -> bool:
        for r in range(len(grid)):
            for c in range(len(grid[0])):
                if c + 1 < len(grid[0]) and grid[r][c] == grid[r][c + 1]:
                    return False
                if r + 1 < len(grid) and grid[r][c] != grid[r + 1][c]:
                    return False
        return True

五、复杂度分析

  • 时间复杂度:O(m × n),其中 m 为行数,n 为列数。每个格子最多比较两个方向。
  • 空间复杂度:O(1),只使用了常数额外空间。

六、示例测试

grid = [
    [1, 2, 3],
    [1, 3, 4],
    [1, 4, 5]
]

sol = Solution()
print(sol.satisfiesConditions(grid))  # 输出 False

这个例子中:

  • grid[0][1] == grid[0][2] 不成立(满足右边不等条件)
  • 但是 grid[1][0] != grid[2][0] 不符合下方一致性条件 所以函数会返回 False

七、总结

这个问题的核心在于:

  • 理解“对格子的局部约束”;
  • 巧用双层遍历配合边界判断;
  • 保持代码结构简洁明了。

以上就是本篇博客的全部内容了。如果你也在刷 LeetCode 或准备面试,建议多积累这类二维矩阵题目的处理技巧,很多图形类、图搜索类题目都逃不开矩阵遍历这个基本功。


📌 欢迎留言交流你对这道题的思考,或者提出更优的解决方式!

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏或转发!🙌

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值