天天看點

leetcode 1128. 等價多米諾骨牌對的數量題解代碼

題解

看似容易實則需要明白一些原理才能做出。

1.把數組中的兩個數從小到大排序,并且變成是為數字,【1,2】即為12(1*10 + 2)【2,1】先排序在變為數字,仍然是12.

2. 如果發現了:當你遇到(1, 2)時,如果 12之前(注意是之前)出現了 m 次,那麼新加入的 12 就能再多貢獻 m 個比對對數。

代碼

class Solution {
public:
    int numEquivDominoPairs(vector<vector<int>>& dominoes) {
        int res = 0;
        int n = dominoes.size();
        vector<int>num(100);//定義了一個100的數組
        for(int i = 0; i < n; i++){
              int val = dominoes[i][0] < dominoes[i][1] ? 10*dominoes[i][0] + dominoes[i][1] : dominoes[i][0] + 10*dominoes[i][1];
              res +=num[val];
              //cout<<res<<'\n';
              num[val]++;
            } 
        return res;
    }
};