pub fn letter_combinations(digits: &str) -> Vec<String> {
if digits.is_empty() { return vec![]; }
let map = [
"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" ];
let mut res = Vec::new();
let mut comb = String::new();
fn backtrack(digits: &[u8], idx: usize, map: &[&str; 10], comb: &mut String, res: &mut Vec<String>) {
if idx == digits.len() {
res.push(comb.clone());
return;
}
let digit = (digits[idx] - b'0') as usize;
for c in map[digit].chars() {
comb.push(c);
backtrack(digits, idx + 1, map, comb, res);
comb.pop();
}
}
backtrack(digits.as_bytes(), 0, &map, &mut comb, &mut res);
res
}