【LeetCode 52】17.电话号码的字母组合

文章目录

一、题意

【LeetCode 52】17.电话号码的字母组合_leetcode

二、解答过程

理解本题后,要解决如下三个问题:

  1. 数字和字母如何映射==用​​map​​​或者​​二维数组​​即可
  2. 两个字母就两个for循环,三个字符我就三个for循环,以此类推,然后发现代码根本写不出来==​​回溯算法可解决n个for循环的问题​
  3. 输入1 * #按键等等异常情况

回溯三部曲:

  • 确定参数
  • 确定终止条件
  • 确定单层递归逻辑
class Solution {
private:
const string letterMap[10]={
"", // 0
"", // 1
"abc", // 2
"def", // 3
"ghi", // 4
"jkl", // 5
"mno", // 6
"pqrs", // 7
"tuv", // 8
"wxyz", // 9
};

public:
vector<string>result;
string s;
//1.
void backtracking(const string& digits,int index)
{
//2.
if(index==digits.size())
{
result.push_back(s);
return;
}

int digit=digits[index]-'0';//将index指向的数字转换为int型
string letters=letterMap[digit];//获取数字对应的字符集
for (int i = 0; i < letters.size(); i++)
{
/* code */
s.push_back(letters[i]);//处理
backtracking(digits,index+1);//递归,注意index+1,下一层要处理下一个数字了

s.pop_back();//回溯
}


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