//给定一个仅包含数字 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'] 的一个数字。
//
// Related Topics 哈希表 字符串 回溯
// 👍 1376 👎 0
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public List<String> letterCombinations(String digits) {
List<String> result = new ArrayList<>();
Map<Character,String> map = new HashMap<>(8);
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");
final int length = digits.length();
List<String> charStr = new ArrayList<>();
if(length > 0){
for(int i = 0;i<length;i++){
charStr.add(map.get(digits.charAt(i)));
}
}
List<String> tmpList;
for(int j = 0;j< length;++j){
String s = charStr.get(j);
if(result.size() > 0){
tmpList = new ArrayList<>(result);
result = new ArrayList<>();
for(int k = tmpList.size(),p=0;p<k;p++){
for(int q = 0,m = s.length(); q < m;q++){
result.add(tmpList.get(p)+s.charAt(q));
}
}
}else{
for(int q = 0,m = s.length(); q < m;q++){
result.add(s.charAt(q)+"");
}
}
}
return result;
}
}
//leetcode submit region end(Prohibit modification and deletion)
leetcode 17 电话号码的数字组合
最新推荐文章于 2024-10-09 11:13:12 发布