今天照常刷了力扣的每日一题,顺道写一篇博客。
这里我直接使用用力扣题的原型,
电话号码的组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
其实实现这道题并不是很难,我是使用递归的方式来实现的,先将数字与对应的字母存进map中,然后对每个使用到的数字循环,递归跑到下一个数字,当长度等于输入字符串长度时,代表取出了一种可能。话不多说,直接上代码。
class Solution {
List<String>list=new ArrayList<String>();
Map<Character, String> map = new HashMap<Character, String>() {{
put('2', "abc");
put('3', "def");
put('4', "ghi");
put('5', "jkl");
put('6', "mno");
put('7', "pqrs");
put('8', "tuv");
put('9', "wxyz");
}};
public List<String> letterCombinations(String digits) {
if(digits==null||digits.equals(""))return new ArrayList();
array(digits,0,"");
return list;
}
public void array(String digits,int length,String s)
{
if(length==digits.length())
list.add(s);
else{
String str=(String)map.get(digits.charAt(length));
for(int i=0;i<str.length();i++)
{
array(digits,length+1,s+str.charAt(i));
}
}
}
}
大家都要好好努力,希望我秋招可以拿到一个不错的offer!!