diff --git a/1814_count_nice_pairs_in_an_array/Cargo.lock b/1814_count_nice_pairs_in_an_array/Cargo.lock new file mode 100644 index 0000000..0838ff3 --- /dev/null +++ b/1814_count_nice_pairs_in_an_array/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "count_nice_pairs_in_an_array" +version = "0.1.0" diff --git a/1814_count_nice_pairs_in_an_array/Cargo.toml b/1814_count_nice_pairs_in_an_array/Cargo.toml new file mode 100644 index 0000000..3f2241a --- /dev/null +++ b/1814_count_nice_pairs_in_an_array/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "count_nice_pairs_in_an_array" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/1814_count_nice_pairs_in_an_array/src/lib.rs b/1814_count_nice_pairs_in_an_array/src/lib.rs new file mode 100644 index 0000000..dd1b528 --- /dev/null +++ b/1814_count_nice_pairs_in_an_array/src/lib.rs @@ -0,0 +1,31 @@ +pub struct Solution; + +impl Solution { + pub fn count_nice_pairs(nums: Vec) -> i32 { + const MOD: i64 = 1_000_000_007; + + let mut groups = std::collections::HashMap::::new(); + for n in nums { + // nums[i] + rev(nums[j]) == nums[j] + rev(nums[i]) + // => nums[i] - rev(nums[i]) == nums[j] - rev(nums[j]) + let num_sub_rev = n - Solution::rev(n); + groups + .entry(num_sub_rev) + .and_modify(|count| *count += 1) + .or_insert(1); + } + + let result: i64 = groups.values().map(|count| count * (count - 1) / 2).sum(); + (result % MOD) as i32 + } + + fn rev(mut num: i32) -> i32 { + let mut result = 0; + while num > 0 { + result *= 10; + result += num % 10; + num /= 10; + } + result + } +}