Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string “23”
Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
给定一个数字字符串,返回数字可能代表的所有可能的字母组合。
下面给出了数字到字母的映射(就像在电话按钮上)。
输入:数字字符串“23”
输出:
[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]。
代码:
public class Solution {
public List<String> letterCombinations(String digits) {
LinkedList<String> list = new LinkedList<>();
String[] mapping = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
if(digits == null || digits.equals("")){
return list;
}
list.add("");
for(int i =0; i<digits.length(); i++){
int c = Character.getNumericValue(digits.charAt(i));
if(c == 1 || c == 0) return new LinkedList<>();
while(list.peek().length() == i){
String tmp = list.remove();
for(char s : mapping[c].toCharArray()){
list.add(tmp + s);
}
}
}
return list;
}
}
这里的巧妙之处是:先把第一个数字对应的字母加入到list中,然后依次取出和第二个数字对应的字母结合再加入到list中,….