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.
这个题目很贴近实际应用,树的遍历是个问题,还要下功夫,下面是一个用迭代实现的:
class Solution { public: void init() { int count = 0; for(int i = 1; i<9; ++i) { string temp; for(int j=0; j<3; ++j) { temp.push_back('a'+ count); count++; } if(i==6 || i==8) { temp.push_back('a'+count); count++; } album.push_back(temp); } } void getcombination(string &digits, int i, int n, string str) { if(i == n) { ret.push_back(str); str.clear(); return; } for(int j=0; j != album[digits[i]-'2'].size(); ++j) { getcombination(digits, i+1, n, str + album[digits[i] -'2'][j]); } } vector<string> letterCombinations(string digits) { if(digits.empty()) { return ret; } string str; init(); getcombination(digits, 0, digits.size(), str); return ret; } private: vector<string> album; vector<string> ret; };
表示这种迭代还是很值得学习,自己的代码能力,还有结合数据结构分析解决问题的能力还是很不足!!!加油!!!