Given a digit string, 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.
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
又加深了对DFS的认识,在递归函数中,需要把握几个点,总能各个击破。
1.就是变化的量要作为参数来传递,这样也就是每个函数在自己的栈中都有该局部变量,这样就可以在回溯到某个点的时候,他的局部变量不会消失。
2.一般的终止条件中,计算结果
代码:
private: map<char, vector<char> > dict; vector<string> ret; int len; public: void createDict() { dict.clear(); dict[‘2‘].push_back(‘a‘); dict[‘2‘].push_back(‘b‘); dict[‘2‘].push_back(‘c‘); dict[‘3‘].push_back(‘d‘); dict[‘3‘].push_back(‘e‘); dict[‘3‘].push_back(‘f‘); dict[‘4‘].push_back(‘g‘); dict[‘4‘].push_back(‘h‘); dict[‘4‘].push_back(‘i‘); dict[‘5‘].push_back(‘j‘); dict[‘5‘].push_back(‘k‘); dict[‘5‘].push_back(‘l‘); dict[‘6‘].push_back(‘m‘); dict[‘6‘].push_back(‘n‘); dict[‘6‘].push_back(‘o‘); dict[‘7‘].push_back(‘p‘); dict[‘7‘].push_back(‘q‘); dict[‘7‘].push_back(‘r‘); dict[‘7‘].push_back(‘s‘); dict[‘8‘].push_back(‘t‘); dict[‘8‘].push_back(‘u‘); dict[‘8‘].push_back(‘v‘); dict[‘9‘].push_back(‘w‘); dict[‘9‘].push_back(‘x‘); dict[‘9‘].push_back(‘y‘); dict[‘9‘].push_back(‘z‘); } void dfs(int loc,string digits,string temp) { if(loc==len){ ret.push_back(temp); //temp.erase(temp.size()-1);在这里擦除是没有用的,这已经是下一个递归函数,回溯到上一个的时候,它的局部变量temp还是三个字母 return; } for (int i=0;i<dict[digits[loc]].size();++i) { temp.push_back(dict[digits[loc]][i]); dfs(loc+1,digits,temp); temp.erase(temp.size()-1); } } vector<string> letterCombinations(string digits) { createDict(); vector<string> tempres; tempres.push_back(""); if(digits.empty()) return tempres; len=digits.size(); dfs(0,digits,""); return ret; } }; int main() { //freopen("C:\\Users\\Administrator\\Desktop\\a.txt","r",stdin); Solution so; so.letterCombinations("258"); return 0; }
时间: 2024-10-21 12:02:41