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; //這裡是等差數列,不是階乘
}
};