等價多米諾骨牌對的數量

給你一個由一些多米諾骨牌組成的列表 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;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章