题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
解题思路
写完之后看了讨论区发现很多人用递归代码量很少就完成了,只能说这道题数据量不算大,不然使用递归肯定是超时的,这个题目就是经典回溯解法。
我看很多人都写了数字-字母对应表,但因为字母是按顺序的,所以可以不用写数字-字母对照表,直接可以算出当前字母相对于’a’ 字符的位置即可。
具体咋算的看我代码32-54行。
代码
class Solution {
public:
int f1(string digits ,int k,vector<int> dp) //判断dp是否合法
{
if(k<0) return 1;
else
{
if( digits[k] == '7' || digits[k] ==