update leetcode

This commit is contained in:
2025-09-02 21:06:57 +08:00
parent 003eb24c77
commit c308ed1d64
20 changed files with 290 additions and 2 deletions

View File

@@ -0,0 +1,6 @@
[package]
name = "p17"
version = "0.1.0"
edition = "2024"
[dependencies]

View 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()));
}