標籤:style class blog code http color
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/ 謝謝!