Idea: Use hashmap to store numbers and their corresponding strings, put the strings in vlue into each layer, add them in a loop, and enter the next layer through depth-first search. The recursion ends when the length of StringBuilder is equal to the length of digits.
class Solution {
private static List<String> list;
private static Map<Character,String> map=new HashMap<>();
private static StringBuilder s=new StringBuilder();
public List<String> letterCombinations(String digits) {
map.put('2',"abc");
map.put('3',"def");
map.put('4',"ghi");
map.put('5',"jkl");
map.put('6',"mno");
map.put('7',"pqrs");
map.put('8',"tuv");
map.put('9',"wxyz");
list=new ArrayList<>();
if (digits==null||digits.length()==0){
return list;
}
DFS(digits,0);
return list;
}
private void DFS(String digits,int index ){
if (index==digits.length()){
list.add(s.toString());
return;
}
String s1=map.get(digits.charAt(index));
for (char a:s1.toCharArray()){
s.append(a);
DFS(digits,index+1);
s.deleteCharAt(s.length()-1);
}
}
}