【Leetcode】2352. 相等行列对

地址:2352. 相等行列对

题目

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

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

省流:即求出有几种这样的完全相等的行列对

 

示例

输入:grid = [[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]]
输出:3
解释:存在三对相等行列对:
- (第 0 行,第 0 列):[3,1,2,2]
- (第 2 行, 第 2 列):[2,4,2,2]
- (第 3 行, 第 2 列):[2,4,2,2]

思路

通过string字符串记录

保存为hash的key,构造string的方法是利用每个数字中间加上逗号分隔,按照行存储,再按照列查找即可

ps:加上“ , ”存储是为了避免两位数字出现无法区分是一位数还是两位数相等导致的结果相等,加上逗号便于区分每个数字

代码 

class Solution {
public:
    int equalPairs(vector<vector<int>>& g) {
        int n = g.size();   //大小为n*n
        unordered_map<string,int> map;
        for(int i=0;i<n;++i){
            string s = "";
            for(int j=0;j<n;++j){
                s += to_string(g[i][j]);
                s += ",";
            }
            s.pop_back();   //去掉末尾的,
            map[s]++;
        }
        int ans = 0;
        //现在按列遍历
        for(int j = 0;j<n;++j){
            string s="";
            for(int i=0;i<n;++i){
                s += to_string(g[i][j]);
                s += ",";
            }
            s.pop_back();    //去掉末尾,
            if(map.count(s))    //判断行中是否有对应顺序的数字,有则ans+1
                ans += map[s];
        }
        return ans;
    }
    
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值