【问题】电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
public static void main(String[] args) {
char[][] strMap = new char[][]{
{}, // 0
{}, // 1
{'a', 'b', 'c'}, // 2
{'d', 'e', 'f'}, // 3
{'g', 'h', 'i'}, // 4
{'j', 'k', 'l'}, // 5
{'m', 'n', 'o'}, // 6
{'p', 'q', 'r', 's'}, // 7
{'t', 'u', 'v'}, // 8
{'w', 'x', 'y', 'z'} // 9
};
dfs(strMap, new char[]{'2', '3', '4'}, 0, "");
}
private static void dfs(char[][] strMap, char[] digit, int h, String combineStr) {
if (h == digit.length) { // 递归终止条件
System.out.println(combineStr); // 直接打印了更清晰明了
return;
}
for (int i = 0; i < strMap[digit[h] - '0'].length; i++) {
combineStr += strMap[digit[h] - '0'][i]; // 加上当前遍历的字符
dfs(strMap, digit, h + 1, combineStr);
combineStr = combineStr.substring(0, combineStr.length() - 1); // 减去增加的字符
}
}
打印结果
afi
bdg
bdh
bdi
beg
beh
bei
bfg
bfh
bfi
cdg
cdh
cdi
ceg
ceh
cei
cfg
cfh
cfi
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。