class Solution {
static String str[] = {
"", "","abc","def", "ghi","jkl", "mno","pqrs","tuv","wxyz"
};
/*
执行用时:
5 ms
, 在所有 Java 提交中击败了
19.26%
的用户
内存消耗:
41.4 MB
, 在所有 Java 提交中击败了
5.02%
的用户
*/
static List<String> ans = new ArrayList<>();
//爆搜
static void dfs(String digits, int u, String path) {
if(u == digits.length()) {
ans.add(path);
return;
}
for(char c: str[digits.charAt(u)-'0'].toCharArray()){
dfs(digits, u + 1, path+c);
}
}
public List<String> letterCombinations1(String digits) {
//清理一下上次测试数据
ans = new ArrayList<String>();
if(digits == null || digits.length() == 0) return ans;
dfs(digits, 0, "");
return ans;
}
//StringBuilder
static int len; //记录一下长度
/**执行用时:
0 ms
, 在所有 Java 提交中击败了
100.00%
的用户
内存消耗:
39.7 MB
, 在所有 Java 提交中击败了
27.78%
的用户
*/
public List<String> letterCombinations(String digits) {
//清理一下上次测试数据
ans = new ArrayList<String>();
if(digits == null || digits.length() == 0) return ans;
len = digits.length();//记录一下长度
dfs2(digits, 0, new StringBuilder());
return ans;
}
static void dfs2(String digits, int u, StringBuilder sb) {
if(u == len) {
ans.add(sb.toString());
return;
}
for(char c: str[digits.charAt(u)-'0'].toCharArray()){
sb.append(c); //添加
dfs2(digits, u + 1, sb);
sb.deleteCharAt(sb.length() - 1); //删除
}
}
}
17. 电话号码的字母组合
最新推荐文章于 2022-11-29 13:15:00 发布
本文介绍如何使用深度优先搜索算法解决LeetCode中的17题——电话号码的字母组合。通过遍历电话号码每个数字对应的字母,生成所有可能的字母组合。
摘要由CSDN通过智能技术生成