给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
思路:输入23,暴力法就是直接两层for循环,如果输入233,就是三层for循环。如果输入数字过多,循环次数过多,因此需要用到回溯法。
难点:
-
数字与字母的映射问题
-
两个字母两个for循环,以此类推,发现有难度。
-
输入1 * #按键等等异常情况
-
数字与字母的映射
可以使用map或者二维数组如 string letterMap[10]做映射,如
const string letterMap[10]={
"",//0
"",//1
"abc",//2
"def",//3
"ghi",//4
"jkl"//5
"mno",//6
"pqrs"//7
"tuv"//8
"wxyz",//9
};
- 解决n个for循环问题
将问题抽象成树形结构后:“2,3”的长度就是遍历的深度,叶子节点就是要收集的结果。