首页 > 代码库 > LeetCode: LetterCombinations 题解

LeetCode: LetterCombinations 题解

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.

题解: 递归。首先将输入字符串解析成数字集合,记录字符串大小为Len。

生成的字符串长度依旧为Len。从首位开始判断该位可以填充的字符。

注意:本题首先需要对手机键盘的字符进行映射,作为辅助。

 1 class Solution { 2 public: 3     char vi[10][4]; 4     vector<string > out; 5     int length; 6     void getVi() 7     { 8         int i,j; 9         for(i=0;i<=9;i++)10             for(j=0;j<4;j++)11                 vi[i][j]=0;12         for(i=2;i<=7;i++)13         {14             for(j=0;j<3;j++)15             {16                 vi[i][j]= a+ 3*(i-2)+j;17             }18         }19         vi[0][0]= ;20         vi[7][3]=s;21         for(i=8;i<=9;i++)22         {23             for(j=0;j<3;j++)24             {25                 vi[i][j]= b + 3*(i-2)+j;26             }27         }28         vi[9][3]=z;29     }30     31     void DFS(int len,string digits, string c)32     {33         if(len==length)34         {35             out.push_back(c);36             return ;37         }38         int count = digits[len]-0;39         for(int i=0;i<4;i++)40         {41            if(vi[count][i]!=0)42                DFS(len+1,digits,c+vi[count][i]);43         }44     }45     vector<string> letterCombinations(string digits) {46         out.clear();47         length = digits.size();48         if(length==0) 49         {50             out.push_back("");51             return out;52         }53         if(digits.find(1)!=string::npos) return out;54         getVi();55         DFS(0,digits,"");56         return out;57     }58 };

 

转载请注明出处: http://www.cnblogs.com/double-win/ 谢谢!