【问题】电话号码的字母组合
给定一个仅蕴含数字 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); // 减去减少的字符 } }
打印后果
afibdgbdhbdibegbehbeibfgbfhbficdgcdhcdicegcehceicfgcfhcfi