https://leetcode.cn/problems/letter-combinations-of-a-phone-number/
题目要求
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
回溯
class Solution {
List<String> res = new ArrayList<>();
StringBuilder str = new StringBuilder();
public List<String> letterCombinations(String digits) {
if (digits.equals("")) return res;
String[] numbers = new String[]{"", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
dfs(0, digits, numbers);
return res;
}
public void dfs(int index, String digits, String[] numbers) {
// 递归结束条件
if (str.length() == digits.length()) {
res.add(str.toString());
return;
}
// 循环回溯
for (int i = index; i < digits.length(); i++) {
int c = digits.charAt(i) - '0' - 1;
for (int j = 0; j < numbers[c].length(); j++) {
str.append(numbers[c].charAt(j));
dfs(i + 1, digits, numbers);
str.deleteCharAt(str.length() - 1);
}
}
}
}
- 定义一个二维数组来实现字母和数字之间的映射;
- 当
str
的长度和字符串的长度相同时,将这一次的结果保存在list
中;