我要进阿里!!!努力!!!
思路:
队列的方法解决
我们声明一个队列来进行循环的拿出增加和修改
先将字母数字的对应关系放入到Map中 描述 数字字符 和 对应的字符串数组 的关系
遍历数字串
取出每一个元素 将对应的字符串的数组拿出
跟队列里面的元素进行一一组合 再重新放入
知道遍历完数字串 结束返回
代码:
class Solution {
public List<String> letterCombinations(String digits) {
/*
*/
List<String> list = new ArrayList<>();
if(digits==null||digits.length() == 0 ){
return list;
}
Queue<String> queue = new LinkedList<>();
Map<Character , String[]> map = new HashMap<Character ,String[]>();
map.put('2', new String[]{"a", "b", "c"});
map.put('3', new String[]{"d", "e", "f"});
map.put('4', new String[]{"g", "h", "i"});
map.put('5', new String[]{"j", "k", "l"});
map.put('6', new String[]{"m", "n", "o"});
map.put('7', new String[]{"p", "q", "r", "s"});
map.put('8', new String[]{"t", "u", "v"});
map.put('9', new String[]{"w", "x", "y", "z"});
for(int i = 0 ;i<digits.length();i++){
dogetans(queue , map.get(digits.charAt(i)));
}
for(String s:queue){
list.add(s);
}
return list;
}
public static Queue<String> dogetans(Queue<String> queue,String[] str){
if(queue.size()==0){
for(String s: str){
queue.add(s);
}
}else{
int size = queue.size();
for(int i = 0 ;i < size ; i++){
String temp = queue.poll();
for(String s : str){
queue.add(temp+s);
}
}
}
return queue;
}
}
结果: