题目:
难度:Medium
- 思路:每一位数字都可以对应多个字母,最终返回的字符串的长度等于数字字符串的长度(生成字符串的过程可以描述为:遍历数字字符串,将当前已经生成的字符串加上当前数字字符对应的字母字符),仔细思考便可以发现其实整个过程有一种先进先出的顺序,先访问过的数字字符对应的字母串在下一次会先出来添加
- 代码:利用LinkedList实现队列
public class Solution {
public List<String> letterCombinations(String digits) {
LinkedList<String> list = new LinkedList<>();//定义一个队列
if(digits == null || digits.length() == 0){
return list;
}
String[] str1 = {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
//String str2 = "22233344455566677778889999";
if(digits.indexOf('1') != -1 || digits.indexOf('0') != -1){
return list;
}
list.add("");
for(int i =0; i < digits.length(); i++){
int x = Character.getNumericValue(digits.charAt(i));
while(list.peek().length() == i){
String t = list.poll();
for(char ch: str1[x-2].toCharArray()){
list.add(t+ch);
}
}
}
return list;
}
}