17. 电话号码的字母组合
回溯:
java
class Solution {
public List<String> letterCombinations(String digits) {
List<String> ans = new ArrayList<>();
if(digits.length() == 0){
return ans;
}
Map<Character,String> hashmap = Map.of(
'2',"abc",
'3',"def",
'4',"ghi",
'5',"jkl",
'6',"mno",
'7',"pqrs",
'8',"tuv",
'9',"wxyz"
);
StringBuffer sb = new StringBuffer();
backtrack(ans,hashmap,digits,0,sb);
return ans;
}
public void backtrack(List<String> ans,Map<Character,String> hashmap,String digits,int index,StringBuffer sb){
if(index == digits.length()){
ans.add(sb.toString());
}
else{
char digit = digits.charAt(index);
String letters = hashmap.get(digit);
for(int i = 0;i<letters.length();i++){
sb.append(letters.charAt(i));
backtrack(ans,hashmap,digits,index+1,sb);
sb.deleteCharAt(index);
}
}
}
}
时间复杂度:O(3^m×4^n)
空间复杂度:O(m+n)