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
};
vector<string>res;
//s中保存了此時從digits[0..index-1]翻譯得到的一個字母字符串
//函數用來尋找digits[index]能夠匹配到的字母,獲得digits[0..index]
//翻譯得到的解
void findCombination(const string &digits,int index,const string &s)
{
cout<<index<<" : "<<s<<endl;
if(index==digits.size())//此時遍歷了整個數字字符串中的一個,說明這個時候得到了其中一個解,開始時回溯
{
//保存s
res.push_back(s);
cout<<"get "<<s<<" ,return"<<endl;
return;
}
char c=digits[index];//得到當前的字符
assert(c>='0'&&c<='9'&&c!='1');
string letters=letterMap[c-'0'];//提取當前數字對應的字母字符串
for(int i=0;i<letters.size();i++)
{
//遞歸的尋找
cout<<"digits["<<index<<"] = "<<c<<" , use "<<letters[i]<<endl;
findCombination(digits,index+1,s+letters[i]);//將letters[i]接在原有路徑經過的節點構成字符串的後面
}
cout<<"digits["<<index<<"] = "<<c<<" complete,return"<<endl;
return;
}
public:
vector<string> letterCombinations(string digits) {
res.clear();//顯示的在初始化的時候將字符串設置爲空
if(digits.size()==0)
{
return res;
}
findCombination(digits,0,"");
return res;
}
};
Leetcode:17. 電話號碼的字母組合
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.