https://leetcode-cn.com/problems/number-of-equivalent-domino-pairs/submissions/
这道题主要是边界条件多:
bool cmp(const vector<int> &a, vector<int> &b)
{
//不能只考虑第一个元素
if (a[0] == b[0])
return a[1] < b[1];
else
return a[0] < b[0];
}
class Solution {
public:
int numEquivDominoPairs(vector<vector<int>>& dominoes) {
for (int i = 0; i < dominoes.size(); ++i)
{
if (dominoes[i][0] > dominoes[i][1])
swap(dominoes[i][0], dominoes[i][1]);
}
sort(dominoes.begin(), dominoes.end(), cmp);
int ans = 0;
int cnt = 1;
for (int i = 1; i < dominoes.size(); ++i)
{
if (dominoes[i][0] == dominoes[i-1][0]
&& dominoes[i][1] == dominoes[i-1][1])
{
++cnt;
}
else
{
ans += foo(cnt-1);
cnt = 1;
}
}
ans += foo(cnt-1); //数组最后一个也要考虑
return ans;
}
int foo(int n)
{
if (n==0) return 0;
return (1+n)*n/2; //这里是等差数列,不是阶乘
}
};