Leetcode17 电话号码组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
思路:大家都能想到,我每次从里面选择一个数,然后把所有的可能都存一下不就行了么,确实这就是经典的回溯便利所有数且由于不用考虑回头甚至不需要写visited
//回溯的模版 返回值类型必然跟着传,遇到符合条件的就可以加进去,最后return这个就行了
//其余的根据需求,一般传递index来表明现在是到哪儿了,方便return出来
class Solution {
String[] num=new String[]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public List<String> letterCombinations(String digits) {
if(digits.length()==0){
return new ArrayList<String>();
}
char[]input=digits.toCharArray();
StringBuilder s=new StringBuilder();
List<String>result=new ArrayList<>();
trace(input,0,s,result);
return result;
}
public void trace(char[] input,int index,StringBuilder s,List<String> result){
if(s.length()==input.length){
result.add(s.toString());
}
if(index>=input.length){
return ;
}
//每次选择index对应的数字下有几种选择 append进去继续回溯是一条路,delete掉选择下一个放进去是另一条路
char[]c=num[input[index]-'0'].toCharArray();
for(int i=0;i<c.length;i++){
s.append(c[i]);
trace(input,index+1,s,result);
s.deleteCharAt(s.length()-1);
}
}
}