0
点赞
收藏
分享

微信扫一扫

17.电话号码的字母组合

萧萧雨潇潇 2022-02-05 阅读 57

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:

1、路径:也就是已经做出的选择。

2、选择列表:也就是你当前可以做的选择。 

3、结束条件:也就是到达决策树底层,无法再做选择的条件。

回溯算法代码框架: 

result = []
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return

for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择

完整题解: 

class Solution {
public:
const string letterMap[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

vector<string> res;
string s;
void backtracking(const string& digits, int index)
{
if (index == digits.size())
{
res.push_back(s);
return;
}
int digit = digits[index] - '0';
string letters = letterMap[digit];
for (int i = 0; i < letters.size(); i++)
{
s.push_back(letters[i]);
backtracking(digits, index + 1);
s.pop_back();
}
}

vector<string> letterCombinations(string digits) {
res.clear();
s.clear();
if(digits.size() == 0) return res;
backtracking(digits, 0);
return res;
}
};
举报

相关推荐

0 条评论