Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
题目是:在拼音9键上含有字母的数字键上取字母 输入23 即从数字键2和3上各取一个字母组合 9种情况
class Solution {
public:
vector<string> letterCombinations(string digits) {
int index=0;
dfs(digits,index);
return _lecom;
}
void dfs(string digits,int index)
{
if(index==digits.length())
_lecom.push_back(temp);
else
{
int i,j=digits[index]-'0';
//取数字对应的字母
string str=ninekey[j];
for(i=0;i<str.length();++i)
{
string str1=temp;
temp+=str[i];
dfs(digits,index+1);
temp=str1; //为了防止在temp.length()==digit.length()还继续向temp里添加字符
} //以及下次循环时只要再加下一个字母即可
}
}
private:
//拼音九键
string ninekey[10]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string> _lecom;
string temp="";//添加字母至temp直到temp.length()到digit.length()
};
遇到的问题:
输入 232 先push_back(ada) 然后temp保存ad 继续循环再加字母b再push_back(adb)继续循环下去向回退