题目描述
思路解析动画文字版
记住「行存签名 → 逐列查表累加」。下面分两段:先哈希所有行,再扫所有列。
哈希第 0 行:读第 0 行第 0 个数 3,把它接到这一行的签名后面,现在是 (3)。
哈希第 0 行:读第 0 行第 1 个数 2,把它接到这一行的签名后面,现在是 (3,2)。
哈希第 0 行:读第 0 行第 2 个数 1,把它接到这一行的签名后面,现在是 (3,2,1)。
第 0 行入表:第 0 行完整签名 (3,2,1) 存进哈希表、计 1。哈希只记「签名 → 出现几次」,不在乎它是第几行。
哈希第 1 行:读第 1 行第 0 个数 1,把它接到这一行的签名后面,现在是 (1)。
哈希第 1 行:读第 1 行第 1 个数 7,把它接到这一行的签名后面,现在是 (1,7)。
哈希第 1 行:读第 1 行第 2 个数 6,把它接到这一行的签名后面,现在是 (1,7,6)。
第 1 行入表:第 1 行完整签名 (1,7,6) 存进哈希表、计 1。哈希只记「签名 → 出现几次」,不在乎它是第几行。
哈希第 2 行:读第 2 行第 0 个数 2,把它接到这一行的签名后面,现在是 (2)。
哈希第 2 行:读第 2 行第 1 个数 7,把它接到这一行的签名后面,现在是 (2,7)。
哈希第 2 行:读第 2 行第 2 个数 7,把它接到这一行的签名后面,现在是 (2,7,7)。
第 2 行入表:第 2 行完整签名 (2,7,7) 存进哈希表、计 1。哈希只记「签名 → 出现几次」,不在乎它是第几行。
三行都已入表:三行的签名都进了哈希表。接下来换个方向,竖着一列一列取出签名,到表里查有没有哪一行和它一模一样。
扫第 0 列:竖着取第 0 列第 0 个数 3,把列签名接起来,现在是 (3)。
扫第 0 列:竖着取第 0 列第 1 个数 1,把列签名接起来,现在是 (3,1)。
扫第 0 列:竖着取第 0 列第 2 个数 2,把列签名接起来,现在是 (3,1,2)。
第 0 列未命中:第 0 列签名 (3,1,2) 在哈希表里没找到,没有哪一行和它完全相同,答案不变,仍是 0 对。
扫第 1 列:竖着取第 1 列第 0 个数 2,把列签名接起来,现在是 (2)。
扫第 1 列:竖着取第 1 列第 1 个数 7,把列签名接起来,现在是 (2,7)。
扫第 1 列:竖着取第 1 列第 2 个数 7,把列签名接起来,现在是 (2,7,7)。
第 1 列命中:第 1 列签名 (2,7,7) 在哈希表里命中 1 次(第 2 行和它一样)。答案加 1,现在共 1 对。绿色就是这对相等的行和列。
扫第 2 列:竖着取第 2 列第 0 个数 1,把列签名接起来,现在是 (1)。
扫第 2 列:竖着取第 2 列第 1 个数 6,把列签名接起来,现在是 (1,6)。
扫第 2 列:竖着取第 2 列第 2 个数 7,把列签名接起来,现在是 (1,6,7)。
第 2 列未命中:第 2 列签名 (1,6,7) 在哈希表里没找到,没有哪一行和它完全相同,答案不变,仍是 1 对。
完成:共 1 对:全部列扫完,一共 1 对相等的行列(第 2 行 = 第 1 列)。靠「行哈希 + 逐列查表」,只花 O(n²) 就避开了三重循环两两比对。
边界先想清:1×1、全相同(n²对)、完全无相等。
面试常追问签名的表示法与「签名聚合」这类母题。
参考代码
from typing import Listfrom collections import Counterclass Solution: def equalPairs(self, grid: List[List[int]]) -> int: rows = Counter(tuple(row) for row in grid) n = len(grid) ans = 0 for c in range(n): ans += rows[tuple(grid[r][c] for r in range(n))] return ans复杂度
- 时间:O(n²),哈希所有行 O(n²)、逐列查表 O(n²),合起来 O(n²)
- 空间:O(n²),哈希表里最多存 n 个长度为 n 的行签名
易错点
面试追问把动画讲成自己的话
追问行签名用什么表示更稳妥?
追问这道题和「字母异位词分组」有什么共性?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。再去主线里挑下一道练手。
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题