leetcode: solve problem 17
This commit is contained in:
parent
b2e06356b0
commit
90b7316078
4 changed files with 83 additions and 0 deletions
7
leetcode/0017-letter-combinations-of-a-phone-number/Cargo.lock
generated
Normal file
7
leetcode/0017-letter-combinations-of-a-phone-number/Cargo.lock
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "letter-combinations-of-a-phone-number"
|
||||
version = "0.1.0"
|
|
@ -0,0 +1,8 @@
|
|||
[package]
|
||||
name = "letter-combinations-of-a-phone-number"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
|
@ -0,0 +1,8 @@
|
|||
# 17. Letter Combinations of a Phone Number
|
||||
|
||||
[Leetcode](https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/)
|
||||
|
||||
Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.
|
||||
Return the answer in any order.
|
||||
|
||||
A mapping of digits to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
|
|
@ -0,0 +1,60 @@
|
|||
pub fn letter_combinations(digits: String) -> Vec<String> {
|
||||
let mut res: Vec<String> = vec![];
|
||||
|
||||
for digit in digits.split("") {
|
||||
if digit.is_empty() {
|
||||
continue;
|
||||
}
|
||||
|
||||
let letters = match digit {
|
||||
"2" => vec!["a", "b", "c"],
|
||||
"3" => vec!["d", "e", "f"],
|
||||
"4" => vec!["g", "h", "i"],
|
||||
"5" => vec!["j", "k", "l"],
|
||||
"6" => vec!["m", "n", "o"],
|
||||
"7" => vec!["p", "q", "r", "s"],
|
||||
"8" => vec!["t", "u", "v"],
|
||||
"9" => vec!["w", "x", "y", "z"],
|
||||
&_ => vec![],
|
||||
};
|
||||
|
||||
if res.is_empty() {
|
||||
for letter in letters {
|
||||
res.push(letter.to_owned());
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
let mut mu: Vec<String> = vec![];
|
||||
for el in res.iter() {
|
||||
for letter in &letters {
|
||||
mu.push(el.to_owned() + letter);
|
||||
}
|
||||
}
|
||||
res = mu;
|
||||
}
|
||||
|
||||
res
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::letter_combinations;
|
||||
|
||||
#[test]
|
||||
fn simple_test() {
|
||||
let expected: Vec<String> = vec!["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]
|
||||
.iter()
|
||||
.map(|s| s.to_string())
|
||||
.collect();
|
||||
let res = letter_combinations("23".to_string());
|
||||
assert_eq!(res, expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_empty_string() {
|
||||
let expected: Vec<String> = vec![];
|
||||
let res = letter_combinations("".to_string());
|
||||
assert_eq!(res, expected);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue