From daf0fbd04b7767b95212806d9e1290086ad2be53 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Sun, 4 May 2025 06:52:54 +0800 Subject: [PATCH] feat: add solutions to lc problem: No.1128 No.1128.Number of Equivalent Domino Pairs --- .../README.md | 40 ++++++++++++++++++- .../README_EN.md | 38 ++++++++++++++++++ .../Solution.rs | 16 ++++++++ .../Solution.ts | 12 ++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 solution/1100-1199/1128.Number of Equivalent Domino Pairs/Solution.rs create mode 100644 solution/1100-1199/1128.Number of Equivalent Domino Pairs/Solution.ts diff --git a/solution/1100-1199/1128.Number of Equivalent Domino Pairs/README.md b/solution/1100-1199/1128.Number of Equivalent Domino Pairs/README.md index 1929c905a49f2..42812ca2724da 100644 --- a/solution/1100-1199/1128.Number of Equivalent Domino Pairs/README.md +++ b/solution/1100-1199/1128.Number of Equivalent Domino Pairs/README.md @@ -62,7 +62,7 @@ tags: 我们可以将每个多米诺骨牌的两个数字按照大小顺序拼接成一个两位数,这样就可以将等价的多米诺骨牌拼接成相同的两位数。例如,`[1, 2]` 和 `[2, 1]` 拼接成的两位数都是 `12`,`[3, 4]` 和 `[4, 3]` 拼接成的两位数都是 `34`。 -然后我们遍历所有的多米诺骨牌,用一个长度为 $100$ 的数组 $cnt$ 记录每个两位数出现的次数。对于每个多米诺骨牌,我们拼接成的两位数为 $x$,那么答案就会增加 $cnt[x]$,接着我们将 $cnt[x]$ 的值加 $1$。继续遍历下一个多米诺骨牌,就可以统计出所有等价的多米诺骨牌对的数量。 +然后我们遍历所有的多米诺骨牌,用一个哈希表或者一个长度为 $100$ 的数组 $cnt$ 记录每个两位数出现的次数。对于每个多米诺骨牌,我们拼接成的两位数为 $x$,那么答案就会增加 $cnt[x]$,接着我们将 $cnt[x]$ 的值加 $1$。继续遍历下一个多米诺骨牌,就可以统计出所有等价的多米诺骨牌对的数量。 时间复杂度 $O(n)$,空间复杂度 $O(C)$。其中 $n$ 是多米诺骨牌的数量,而 $C$ 是多米诺骨牌中拼接成的两位数的最大数量,即 $100$。 @@ -132,6 +132,44 @@ func numEquivDominoPairs(dominoes [][]int) (ans int) { } ``` +#### TypeScript + +```ts +function numEquivDominoPairs(dominoes: number[][]): number { + const cnt: number[] = new Array(100).fill(0); + let ans = 0; + + for (const [a, b] of dominoes) { + const key = a < b ? a * 10 + b : b * 10 + a; + ans += cnt[key]; + cnt[key]++; + } + + return ans; +} +``` + +#### Rust + +```rust +impl Solution { + pub fn num_equiv_domino_pairs(dominoes: Vec>) -> i32 { + let mut cnt = [0i32; 100]; + let mut ans = 0; + + for d in dominoes { + let a = d[0] as usize; + let b = d[1] as usize; + let key = if a < b { a * 10 + b } else { b * 10 + a }; + ans += cnt[key]; + cnt[key] += 1; + } + + ans + } +} +``` + diff --git a/solution/1100-1199/1128.Number of Equivalent Domino Pairs/README_EN.md b/solution/1100-1199/1128.Number of Equivalent Domino Pairs/README_EN.md index 5da09e06b223c..7ea5bb21f9329 100644 --- a/solution/1100-1199/1128.Number of Equivalent Domino Pairs/README_EN.md +++ b/solution/1100-1199/1128.Number of Equivalent Domino Pairs/README_EN.md @@ -128,6 +128,44 @@ func numEquivDominoPairs(dominoes [][]int) (ans int) { } ``` +#### TypeScript + +```ts +function numEquivDominoPairs(dominoes: number[][]): number { + const cnt: number[] = new Array(100).fill(0); + let ans = 0; + + for (const [a, b] of dominoes) { + const key = a < b ? a * 10 + b : b * 10 + a; + ans += cnt[key]; + cnt[key]++; + } + + return ans; +} +``` + +#### Rust + +```rust +impl Solution { + pub fn num_equiv_domino_pairs(dominoes: Vec>) -> i32 { + let mut cnt = [0i32; 100]; + let mut ans = 0; + + for d in dominoes { + let a = d[0] as usize; + let b = d[1] as usize; + let key = if a < b { a * 10 + b } else { b * 10 + a }; + ans += cnt[key]; + cnt[key] += 1; + } + + ans + } +} +``` + diff --git a/solution/1100-1199/1128.Number of Equivalent Domino Pairs/Solution.rs b/solution/1100-1199/1128.Number of Equivalent Domino Pairs/Solution.rs new file mode 100644 index 0000000000000..6c77eb9b38042 --- /dev/null +++ b/solution/1100-1199/1128.Number of Equivalent Domino Pairs/Solution.rs @@ -0,0 +1,16 @@ +impl Solution { + pub fn num_equiv_domino_pairs(dominoes: Vec>) -> i32 { + let mut cnt = [0i32; 100]; + let mut ans = 0; + + for d in dominoes { + let a = d[0] as usize; + let b = d[1] as usize; + let key = if a < b { a * 10 + b } else { b * 10 + a }; + ans += cnt[key]; + cnt[key] += 1; + } + + ans + } +} diff --git a/solution/1100-1199/1128.Number of Equivalent Domino Pairs/Solution.ts b/solution/1100-1199/1128.Number of Equivalent Domino Pairs/Solution.ts new file mode 100644 index 0000000000000..10c4263404f3e --- /dev/null +++ b/solution/1100-1199/1128.Number of Equivalent Domino Pairs/Solution.ts @@ -0,0 +1,12 @@ +function numEquivDominoPairs(dominoes: number[][]): number { + const cnt: number[] = new Array(100).fill(0); + let ans = 0; + + for (const [a, b] of dominoes) { + const key = a < b ? a * 10 + b : b * 10 + a; + ans += cnt[key]; + cnt[key]++; + } + + return ans; +}