update leetcode
This commit is contained in:
6
leetcode_rs/problems/p17/Cargo.toml
Normal file
6
leetcode_rs/problems/p17/Cargo.toml
Normal file
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "p17"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
45
leetcode_rs/problems/p17/src/main.rs
Normal file
45
leetcode_rs/problems/p17/src/main.rs
Normal file
@@ -0,0 +1,45 @@
|
||||
fn letter_combinations(digits: String) -> Vec<String> {
|
||||
if digits.is_empty() {
|
||||
return vec![];
|
||||
}
|
||||
let alpha_set: Vec<Vec<char>> = vec![
|
||||
vec![], // 0
|
||||
vec![], // 1
|
||||
vec!['a', 'b', 'c'], // 2
|
||||
vec!['d', 'e', 'f'], // 3
|
||||
vec!['g', 'h', 'i'], // 4
|
||||
vec!['j', 'k', 'l'], // 5
|
||||
vec!['m', 'n', 'o'], // 6
|
||||
vec!['p', 'q', 'r', 's'], // 7
|
||||
vec!['t', 'u', 'v'], // 8
|
||||
vec!['w', 'x', 'y', 'z'], // 9
|
||||
];
|
||||
|
||||
let mut candidate_alpha = Vec::new();
|
||||
for digit in digits.chars() {
|
||||
let digit = digit.to_digit(10).unwrap() as usize;
|
||||
candidate_alpha.push(alpha_set[digit].clone());
|
||||
}
|
||||
|
||||
let total_len: usize = candidate_alpha.iter().map(|x| x.len()).product();
|
||||
let mut result: Vec<String> = vec![String::new(); total_len];
|
||||
|
||||
for (idx, combination) in result.iter_mut().enumerate() {
|
||||
let mut temp_idx = idx;
|
||||
for chars in candidate_alpha.iter().rev() {
|
||||
let char_idx = temp_idx % chars.len();
|
||||
combination.push(chars[char_idx]);
|
||||
temp_idx /= chars.len();
|
||||
}
|
||||
combination
|
||||
.chars()
|
||||
.rev()
|
||||
.collect::<String>()
|
||||
.clone_into(combination);
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
fn main() {
|
||||
dbg!(letter_combinations("234".to_string()));
|
||||
}
|
||||
Reference in New Issue
Block a user