Skip to content

Commit 9877046

Browse files
authored
feat: add solutions to lc problem: No.1128 (#4386)
No.1128.Number of Equivalent Domino Pairs
1 parent 1bf0fe3 commit 9877046

File tree

4 files changed

+105
-1
lines changed

4 files changed

+105
-1
lines changed

solution/1100-1199/1128.Number of Equivalent Domino Pairs/README.md

+39-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ tags:
6262

6363
我们可以将每个多米诺骨牌的两个数字按照大小顺序拼接成一个两位数,这样就可以将等价的多米诺骨牌拼接成相同的两位数。例如,`[1, 2]``[2, 1]` 拼接成的两位数都是 `12``[3, 4]``[4, 3]` 拼接成的两位数都是 `34`
6464

65-
然后我们遍历所有的多米诺骨牌,用一个长度为 $100$ 的数组 $cnt$ 记录每个两位数出现的次数。对于每个多米诺骨牌,我们拼接成的两位数为 $x$,那么答案就会增加 $cnt[x]$,接着我们将 $cnt[x]$ 的值加 $1$。继续遍历下一个多米诺骨牌,就可以统计出所有等价的多米诺骨牌对的数量。
65+
然后我们遍历所有的多米诺骨牌,用一个哈希表或者一个长度为 $100$ 的数组 $cnt$ 记录每个两位数出现的次数。对于每个多米诺骨牌,我们拼接成的两位数为 $x$,那么答案就会增加 $cnt[x]$,接着我们将 $cnt[x]$ 的值加 $1$。继续遍历下一个多米诺骨牌,就可以统计出所有等价的多米诺骨牌对的数量。
6666

6767
时间复杂度 $O(n)$,空间复杂度 $O(C)$。其中 $n$ 是多米诺骨牌的数量,而 $C$ 是多米诺骨牌中拼接成的两位数的最大数量,即 $100$。
6868

@@ -132,6 +132,44 @@ func numEquivDominoPairs(dominoes [][]int) (ans int) {
132132
}
133133
```
134134

135+
#### TypeScript
136+
137+
```ts
138+
function numEquivDominoPairs(dominoes: number[][]): number {
139+
const cnt: number[] = new Array(100).fill(0);
140+
let ans = 0;
141+
142+
for (const [a, b] of dominoes) {
143+
const key = a < b ? a * 10 + b : b * 10 + a;
144+
ans += cnt[key];
145+
cnt[key]++;
146+
}
147+
148+
return ans;
149+
}
150+
```
151+
152+
#### Rust
153+
154+
```rust
155+
impl Solution {
156+
pub fn num_equiv_domino_pairs(dominoes: Vec<Vec<i32>>) -> i32 {
157+
let mut cnt = [0i32; 100];
158+
let mut ans = 0;
159+
160+
for d in dominoes {
161+
let a = d[0] as usize;
162+
let b = d[1] as usize;
163+
let key = if a < b { a * 10 + b } else { b * 10 + a };
164+
ans += cnt[key];
165+
cnt[key] += 1;
166+
}
167+
168+
ans
169+
}
170+
}
171+
```
172+
135173
<!-- tabs:end -->
136174

137175
<!-- solution:end -->

solution/1100-1199/1128.Number of Equivalent Domino Pairs/README_EN.md

+38
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,44 @@ func numEquivDominoPairs(dominoes [][]int) (ans int) {
128128
}
129129
```
130130

131+
#### TypeScript
132+
133+
```ts
134+
function numEquivDominoPairs(dominoes: number[][]): number {
135+
const cnt: number[] = new Array(100).fill(0);
136+
let ans = 0;
137+
138+
for (const [a, b] of dominoes) {
139+
const key = a < b ? a * 10 + b : b * 10 + a;
140+
ans += cnt[key];
141+
cnt[key]++;
142+
}
143+
144+
return ans;
145+
}
146+
```
147+
148+
#### Rust
149+
150+
```rust
151+
impl Solution {
152+
pub fn num_equiv_domino_pairs(dominoes: Vec<Vec<i32>>) -> i32 {
153+
let mut cnt = [0i32; 100];
154+
let mut ans = 0;
155+
156+
for d in dominoes {
157+
let a = d[0] as usize;
158+
let b = d[1] as usize;
159+
let key = if a < b { a * 10 + b } else { b * 10 + a };
160+
ans += cnt[key];
161+
cnt[key] += 1;
162+
}
163+
164+
ans
165+
}
166+
}
167+
```
168+
131169
<!-- tabs:end -->
132170

133171
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
impl Solution {
2+
pub fn num_equiv_domino_pairs(dominoes: Vec<Vec<i32>>) -> i32 {
3+
let mut cnt = [0i32; 100];
4+
let mut ans = 0;
5+
6+
for d in dominoes {
7+
let a = d[0] as usize;
8+
let b = d[1] as usize;
9+
let key = if a < b { a * 10 + b } else { b * 10 + a };
10+
ans += cnt[key];
11+
cnt[key] += 1;
12+
}
13+
14+
ans
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
function numEquivDominoPairs(dominoes: number[][]): number {
2+
const cnt: number[] = new Array(100).fill(0);
3+
let ans = 0;
4+
5+
for (const [a, b] of dominoes) {
6+
const key = a < b ? a * 10 + b : b * 10 + a;
7+
ans += cnt[key];
8+
cnt[key]++;
9+
}
10+
11+
return ans;
12+
}

0 commit comments

Comments
 (0)