题目


题意及思路

题意:这题是说(语言略显苍白),判断一堆“牌”中,含有相同牌的对数。

思路:@方法一,我的代码用的是该方法,是将 [x,y] 中较小的数乘以10, 加上较大数,得到一个唯一的值(encoding)存入到flag数组中。(相同的值即为相同“牌”,存在一个数组域中),然后就可以统计flag数组,这就是组合问题,n个里面任意两个可以组成一对。 @方法二,运用HashMap。 @方法三,统计个数。

代码

class Solution {
    public int numEquivDominoPairs(int[][] dominoes) {
        int t,ans = 0;
        int rlen = dominoes.length;
        int flag[] = new int[100];
        // encoding
        for(int i=0;i<rlen;i++){
            if(dominoes[i][0]<dominoes[i][1]){
                t = dominoes[i][0]*10+dominoes[i][1];
            }else{
                t = dominoes[i][1]*10+dominoes[i][0];
            }
            flag[t]++;
        }
        // count
        for(int i=0;i<flag.length;i++){
            if(flag[i]>1){
                ans += (flag[i]*(flag[i]-1))/2;
            }
        }
        return ans;
    }
}