1128. 等价多米诺骨牌对的数量

解题思路:

1.借助变量i,遍历原数组,以dominoes[i][0]和dominoes[i][1]中的较小数作为十位,较大数作为个位

2.将第一步得到的新数字存入新的数组,同时记录当前的新数字出现的次数

3.由于数组中的数字大于0且小于10,所以新数字的最大值是99。

4.从0~99开始遍历新数组,如果当前数字出现的次数大于1,则计算全排列,公式:n*(n-1)/2

时间复杂度O(n)

空间复杂度O(100)

代码实现:

class Solution {
    public int numEquivDominoPairs(int[][] dominoes) {
        int len=dominoes.length;
        int cnt=0;
        int k=0;
        int[] res=new int[100];
        for(int i=0;i<len;++i){
            int temp=0;
            //较小的数作为十位,较大的作为个位
            if(dominoes[i][0]<dominoes[i][1]){
                temp+=dominoes[i][0]*10+dominoes[i][1];
            }
            else{
                temp+=dominoes[i][1]*10+dominoes[i][0];
            }
            res[temp]++;
        }
        //找相同的数字的对数
        for(int i=0;i<100;++i){
            if(res[i]>1){
                cnt+=res[i]*(res[i]-1)/2;
            }
        }
        return cnt;
    }
}
发布了158 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/junjunjiao0911/article/details/104102668