LeetCode-017-电话号码的字母组合
思路
很容易想到使用for循环直接暴力解决,但是要知道,所给case长度为2,因此只有2层for,当长度为10时该怎么办,因此,由于长度不确定无法编写for代码,所以使用回溯法来解决,具体可以参考代码注释
代码
class Solution {
String[] letter_map = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//按键
List<String> res = new ArrayList<>();//返回值
public List<String> letterCombinations(String digits) {
if(digits==null||digits.length()==0)return res; //空则返回
backTrack(0,digits,new StringBuilder());//开始回溯
return res;
}
//参数依次为,当前的层数、所给电话号码、当前已拼接字符串
public void backTrack(int index,String digits,StringBuilder letter){
//如果已经出界,则添加答案,返回
if(index==digits.length()){
res.add(letter.toString());
return;
}
//确定当前的层数
int pos=digits.charAt(index)-'0';
//获得按键
String map=letter_map[pos];
for(int i=0;i<map.length();i++){
//增加字母
letter.append(map.charAt(i));
//回溯
backTrack(index+1,digits,letter);
//返回原样,添加该层其他字母
letter.deleteCharAt(letter.length()-1);
}
}
}