From 9fe38b058dd08df7795af982322091c4fc767698 Mon Sep 17 00:00:00 2001 From: jusexton Date: Tue, 23 Jul 2024 20:47:26 -0500 Subject: [PATCH] Added sort jumbled numbers solution. --- README.md | 1 + src/leetcode/mod.rs | 1 + src/leetcode/sort_jumbled_numbers.rs | 40 ++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 src/leetcode/sort_jumbled_numbers.rs diff --git a/README.md b/README.md index f506253..06cf2bd 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,7 @@ other languages. - Rotate Array (https://leetcode.com/problems/rotate-array/) - Sort Colors (https://leetcode.com/problems/sort-colors) - Rotate Digits (https://leetcode.com/problems/rotated-digits) +- Sort Jumbled Numbers (https://leetcode.com/problems/sort-the-jumbled-numbers) ### Other diff --git a/src/leetcode/mod.rs b/src/leetcode/mod.rs index fca91d8..a109244 100644 --- a/src/leetcode/mod.rs +++ b/src/leetcode/mod.rs @@ -48,3 +48,4 @@ mod remove_duplicates; mod sort_people; mod max_repeating_substr; mod freq_sort; +mod sort_jumbled_numbers; diff --git a/src/leetcode/sort_jumbled_numbers.rs b/src/leetcode/sort_jumbled_numbers.rs new file mode 100644 index 0000000..bf4b2ef --- /dev/null +++ b/src/leetcode/sort_jumbled_numbers.rs @@ -0,0 +1,40 @@ +use std::collections::HashMap; + +pub fn sort_jumbled(mapping: Vec, mut numbers: Vec) -> Vec { + let mut m = HashMap::with_capacity(numbers.len()); + for (index, number) in numbers.iter().enumerate() { + let mapped = map_number(*number, &mapping); + m.insert(*number, (mapped, index)); + } + + numbers.sort_by_key(|number| m.get(number)); + numbers +} + +fn map_number(mut number: i32, mapping: &[i32]) -> i32 { + if number == 0 { + return mapping[0]; + } + + let mut mapped = 0; + let mut place = 0; + while number > 0 { + mapped += mapping[number as usize % 10] * 10_i32.pow(place); + number /= 10; + place += 1; + } + mapped +} + +#[cfg(test)] +mod tests { + use super::sort_jumbled; + + #[test] + fn jumped_numbers_are_sorted() { + let mapping = vec![9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; + let numbers = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + let actual = sort_jumbled(mapping, numbers); + assert_eq!(vec![9, 8, 7, 6, 5, 4, 3, 2, 1, 0], actual) + } +}