题解:
初步拿到这个题,其实最纠结的地方是二维数组的列是固定的为2,即数组的每一维都是两个数,还是每一维的数量不确定,看到题解都是默认将列数当成2来做,其实看到题目给的接口参数我就觉得应该不是固定的2。就按固定的2做吧
如果列数固定为2那就好办了,直接用哈希的方法,由于题目中已经限制了1 <= dominoes[i][j] <= 9
所以将两个组合并成一个整数,最大也就是99,定义一个100大小的int数组就够用了,代码如下:
int numEquivDominoPairs(int** dominoes, int dominoesSize, int* dominoesColSize)
{
int hash[100];
memset(hash,0,100*sizeof(int));
int i=0,hashkey=0,retValue=0;
for(i=0; i<dominoesSize; i++)
{
hashkey = dominoes[i][0] < dominoes[i][1]? dominoes[i][0]*10+dominoes[i][1]:dominoes[i][1]*10+dominoes[i][0];
retValue += hash[hashkey];
hash[hashkey]++;
}
return retValue;
}
可以看到第三个参数根本没用,如果数组的每一维多余两个数的话,该题的难度就要从简单改成困难了