給你一個由一些多米諾骨牌組成的列表 dominoes
。
如果其中某一張多米諾骨牌可以通過旋轉 0
度或 180
度得到另一張多米諾骨牌,我們就認爲這兩張牌是等價的。
形式上,dominoes[i] = [a, b]
和 dominoes[j] = [c, d]
等價的前提是 a==c
且 b==d
,或是 a==d
且 b==c
。
在 0 <= i < j < dominoes.length
的前提下,找出滿足 dominoes[i]
和 dominoes[j]
等價的骨牌對 (i, j)
的數量。
示例:
輸入:dominoes = [[1,2],[2,1],[3,4],[5,6]]
輸出:1
提示:
1 <= dominoes.length <= 40000
1 <= dominoes[i][j] <= 9
這題判題系統對於時間的限制非常嚴,所以暴力肯定會超時
//解題思路就是通過將所有向量放置在一個數組中(和骨牌對的順序無關)
//然後利用Cn2=(n*(n-1))/2求出骨牌對數量
class Solution {
public:
int numEquivDominoPairs(vector<vector<int>>& dominoes) {
int row=dominoes.size();
int dp[10][10]={0};
for(int i=0;i<row;++i){
if(dominoes[i][0]>dominoes[i][1])
++dp[dominoes[i][1]][dominoes[i][0]];
else
++dp[dominoes[i][0]][dominoes[i][1]];
}
int res=0;
for(int i=0;i<10;++i)
for(int j=i;j<10;++j)
{
if(dp[i][j]>1)
res+=(dp[i][j]*(dp[i][j]-1))/2;
}
return res;
}
};