import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param digits string字符串 * @return string字符串一维数组 */ private List<String> res; private StringBuilder path; private final String[] letterMAP = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" }; public String[] letterCombinations(String digits) { res = new ArrayList<>(); path = new StringBuilder(); if (digits.length() == 0) return res.toArray(new String[0]); dfs(digits, 0); return res.toArray(new String[0]); } private void dfs(String digits, int u) { if (u == digits.length()) { res.add(path.toString()); return; } for (char c : letterMAP[digits.charAt(u) - '0'].toCharArray()) { path.append(c); dfs(digits, u + 1); path.deleteCharAt(path.length() - 1); } } }
使用的是Java语言。
该题考察的知识点是回溯算法。
代码的文字解释如下:
- 如果输入字符串
digits
为空,直接将结果列表转换为数组返回。 - 调用
dfs
方法开始深度优先搜索过程,并传递输入字符串digits
和初始索引值0。 - 在
dfs
方法中,如果索引值等于输入字符串的长度,表示已经遍历完了所有的数字字符,将生成的字符串添加到结果列表中,并返回。 - 循环遍历当前数字对应的字符串中的每个字符。
- 将字符添加到
path
字符串的末尾。 - 递归调用
dfs
方法,将索引值加1,继续填充下一个位置的字符。 - 递归返回后,将
path
字符串末尾的字符删除,回到上一个状态,继续遍历下一个字符。 - 函数返回结果列表
res
,将其转换为数组形式返回。