先尝试暴力解法:
var numEquivDominoPairs = function(dominoes) {var count=0for(let i=0;i<dominoes.length-1;i++){for(let j=i+1;j<dominoes.length;j++){if((dominoes[i][0]==dominoes[j][0] && dominoes[i][1]==dominoes[j][1]) || (dominoes[i][0]==dominoes[j][1] && dominoes[i][1]==dominoes[j][0])){count++}}}return count
};
可惜时间超限:
直接参考官方解法,太巧妙了:
不妨直接让每一个二元对都变为指定的格式,即第一维必须不大于第二维。这样两个二元对「等价」当且仅当两个二元对完全相同。
注意到二元对中的元素均不大于 9,因此我们可以将每一个二元对拼接成一个两位的正整数,即 (x,y)→10x+y(x, y) 。这样就无需使用哈希表统计元素数量,而直接使用长度为 100的数组即可。
作者:力扣官方题解
链接:1128 官方题解
var numEquivDominoPairs = function(dominoes) {const num = new Array(100).fill(0);let ret = 0;for (const domino of dominoes) {const val = domino[0] < domino[1] ? domino[0] * 10 + domino[1] : domino[1] * 10 + domino[0];ret += num[val];num[val]++;}return ret;
};
消耗时间和内存情况: