Leetcode 17 电话号码的字母组合
2023-12-13 08:19:53
理解题意:
????????给定一个仅包含数字?
2-9
?的字符串,返回所有它能表示的字母组合????????? ? ? ? 本质上:数字代表着一个字母集合
? ? ? ? ????????数字的个数决定了递归的深度,即树的深度
? ? ? ? ? ? ? ? 数字代表的字母组合决定了当前树的宽度。
????????
1.暴力回溯
这里没有什么剪枝的约束条件,只有结束条件。
补充:StringBuilder的两个方法
StringBuilder path=new StringBuilder(); path.append(letter.charAt(i));//追加元素 path.deleteCharAt(path.length()-1);//删除末尾元素
LinkedList<String> results=new LinkedList<>();
StringBuilder path=new StringBuilder();
String[] letterMap=new String[]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public List<String> letterCombinations(String digits) {
if(digits==null||digits.length()==0) return results;
backtracking(digits,0);
return results;
}
public void backtracking(String digits,int index){
if(index==digits.length()){
//结束条件:收集结果
results.add(path.toString());
return;
}
int digit=digits.charAt(index)-'0';
String letter=letterMap[digit];
for(int i=0;i<letter.length();i++){
//遍历当前数字对应的字母集合
//路径追加
path.append(letter.charAt(i));
//递归
backtracking(digits,index+1);
//路径回溯
path.deleteCharAt(path.length()-1);
}
}
2.分析
时间复杂度:O()
空间复杂度:O(m+n)
其中m是3个字母的数字个数,n是4个字母的数字个数。
三个字母表示该层有三个分支
????????
文章来源:https://blog.csdn.net/lt_BeiMo/article/details/134818748
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!