1.题目
Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
Input: "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
2.解析
1.终止条件:
tmp.size()==digits.size()
2.回溯步骤
3.注意偏移量
dights[k] - '2'
string letter = mystring[digits[k]-'2'];
for(int i=0;i<letter.size();i++)
{
tmp.push_back(letter[i]);
dfs(digits,k+1);
tmp.pop_back();
}
3.完整代码
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Solution
{
public:
vector<string> letterCombinations(string digits)
{
if (digits.empty())
return res;
dfs(digits, 0);
return res;
}
void dfs(string& digits, int k)
{
if (tmp.size() == digits.size())
{
res.push_back(tmp);
return;
}
string letter = mystring[digits[k] - '2'];
for (int i = 0; i < letter.size(); i++)
{
tmp.push_back(letter[i]);
dfs(digits, k + 1);
tmp.pop_back();
}
}
private:
vector<string> res;
string tmp;
string mystring[8] = { "abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
};
int main()
{
string s;
getline(cin, s);
Solution mys;
vector<string> res = mys.letterCombinations(s);
for (auto c : res)
cout << c << endl;
system("pause");
return 0;
}