把所有数组都排序一遍,令所有的dominoes[i][0]<dominoes[i][1],然后再让数组按照dominoes[i][0]从小到大排序,这样的话,所有的等价多米诺骨牌对都是相连的了,然后只要遍历一遍数组,就可以得到等价的骨牌对了。
class Solution {
public:
int numEquivDominoPairs(vector<vector<int>>& dominoes) {
int n=dominoes.size();
for(int i=0;i<n;i++){
if(dominoes[i][0]>dominoes[i][1]){
swap(dominoes[i][0],dominoes[i][1]);
}
}
int res=0;
int temp=1;
sort(dominoes.begin(),dominoes.end());
for(int i=0;i<n-1;i++){
if(dominoes[i][0]==dominoes[i+1][0]&&dominoes[i][1]==dominoes[i+1][1])
temp++;
else{
res+=temp*(temp-1)/2;
temp=1;
}
}
return res+temp*(temp-1)/2;
}
};