问题描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:输入:digits = ""
输出:[]
示例 3:输入:digits = "2"
输出:["a","b","c"]
提示:
0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Java 全排列
class Solution {
public List<String> letterCombinations(String digits) {
//全排列
List<String> ans = new ArrayList<>();
if(digits == null || digits.length() == 0) return ans;
//存储数字对应的字符串
Map<Character,String> map = new HashMap<>();
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");
permutation(ans,map,digits,0,new StringBuilder());
return ans;
}
public void permutation(List<String> ans,Map<Character,String> map,String digits,
int index,StringBuilder sb){
if(index == digits.length()){
ans.add(sb.toString());
}else {
char c = digits.charAt(index);
String s = map.get(c);
for(int i = 0;i < s.length();i++){
sb.append(s.charAt(i));
permutation(ans,map,digits,index + 1,sb);
sb.deleteCharAt(index);
}
}
}
}