import java.util.ArrayList;
import java.lang.StringBuilder;
class Solution {
/*
回溯思想
推荐看leetcode高赞题解,清楚明了,简单易懂。
“23”所有的情况就是“abc”“def”的组合一共有3*3=9种情况
一层循环套一层循环,直到把所有的情况考虑到。
*/
public List<String> letterCombinations(String digits) {
List<String> res = new ArrayList<>();
if(digits == null ||digits.length() == 0){
return res;
}
//建一个字符串数组nums,数组的下标和电话数字对应,如nums[2]存储的是"abc"
String nums[] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
process(digits,0,nums,new StringBuilder(),res);
return res;
}
/*
index记录层数,也是生成的字符串多长
save保存遍历到的字符
res保存结果
*/
public void process(String str,int index,String[] nums,StringBuilder save,List<String> res){
//终止条件
if(index == str.length()){
res.add(save.toString());
return ;
}
int number = str.charAt(index)-'0';//
String tmp = nums[number];
for(int i=0;i<tmp.length();i++){//穷尽一个电话数字对应字母的所有情况。
save.append(tmp.charAt(i));//添加遍历到的字符
/*
递归,去穷尽下一个电话数字的所有情况
注意不要写index++或++index,否则index本身会自增1,不能准确表示层数。
*/
process(str,index+1,nums,save,res);
save.deleteCharAt(save.length()-1);//回退到上一层
}
}
}
0回溯中等 leetcode17. 电话号码的字母组合
最新推荐文章于 2024-07-25 19:34:38 发布