G
N
I
D
A
O
L

给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。

如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。

题目链接:https://leetcode.cn/problems/equal-row-and-column-pairs/

# 解题思路

hash 计数:

  • 将行、列转换成数字字符串(用分隔符‘#’连接),如此可以得到唯一的 key
  • 遍历每一行,建立数字字符串的 hash 计数表
  • 再遍历每一列,统计相等的数字字符串,累加到答案即可

# 提交结果

image.png

# 代码

a
class Solution {
    public int equalPairs(int[][] grid) {
        int n = grid.length;
        
        Map<String, Integer> rowMap = new HashMap<>();
        for (int[] g : grid) {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < n; ++j) {
                sb.append(g[j]).append('#');
            }
            String k = sb.toString();
            rowMap.put(k, rowMap.getOrDefault(k, 0) + 1);
        }
        
        int ret = 0;
        for (int j = 0; j < n; ++j) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < n; ++i) {
                sb.append(grid[i][j]).append('#');
            }
            ret += rowMap.getOrDefault(sb.toString(), 0);
        }
        
        return ret;
    }
}
更新于 阅读次数

😉觉得写的还不错,请我喝杯咖啡吧😁

独步凌波 微信支付

微信支付

独步凌波 支付宝

支付宝