解题思路:
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;
}
}