LeetCode 17 Letter Combinations of a Phone Number

题目传送门:

题解:

代码,我起初是参考的github上的一个实现,一开始,对于递归过程不是特别理解,想着,应该是一种树形结构,就在原来代码的基础上适当的地方加上一些打印输出,理解了过程,我的代码如下:

 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 #include<cassert>
 5 
 6 using namespace std;
 7 
 8 class Solution {
 9 
10 private:
11     const string letterMap[10] = {
12         " ",
13         "",
14         "abc",
15         "def",
16         "ghi",
17         "jkl",
18         "mno",
19         "pqrs",
20         "tuv",
21         "wxyz"
22     };
23     vector<string> res;
24     //s是每次处理一个字符的时候,之前已经转换成的字符串保存在s中
25     //s中保存了此时从digits[0...index-1]翻译得到的一个字母字符串
26     //那在这一次翻译中,只需寻找和digits[index]匹配的字母,找到后,加上s,获得digits[0...index]翻译得到的解
27     // 在conbination()中找到
28     //每次调用findCombination()都只处理digits中的一位,这一位在digits 中的位置是index
29     
30     void findCombination(const string& digits,int index,const string& s){
31         cout<<index<<" : "<<s<<endl;
32        if(index == digits.size()){
33         res.push_back(s);
34         return;
35        }
36 
37        char c = digits[index];
38        assert(c>='0' && c<='9' && c!='1');
39        string letters = letterMap[c - '0'];
40        // for(int i = 0;i<letters.size();i++)
41        //  findCombination(digits,index+1,s+letters[i]);
42        for(int i = 0;i<letters.size();i++){
43         cout<<"digits["<<index<<"] = "<<c<<" , use "<<letters[i]<<endl;
44         findCombination(digits,index+1,s + letters[i]);
45        }
46 
47        cout<<"digits["<<index<<"] = "<<c<<" complete, return"<<endl;
48     return;
49     }
50 
51     public:
52     vector<string> letterCombinations(string digits) {
53         res.clear();
54         if(digits =="")
55             return res;
56         findCombination(digits,0,"");
57         return res;
58     }
59     
60 };
61 
62 int main(){
63     vector<string> res = Solution().letterCombinations("234");
64     for(int i = 0;i<res.size();i++)
65         cout<<res[i]<<endl;
66     return 0;
67 }

 

打印输出结果如下:

  1 0 :
  2 digits[0] = 2 , use a
  3 1 : a
  4 digits[1] = 3 , use d
  5 2 : ad
  6 digits[2] = 4 , use g
  7 3 : adg
  8 digits[2] = 4 , use h
  9 3 : adh
 10 digits[2] = 4 , use i
 11 3 : adi
 12 digits[2] = 4 complete, return
 13 digits[1] = 3 , use e
 14 2 : ae
 15 digits[2] = 4 , use g
 16 3 : aeg
 17 digits[2] = 4 , use h
 18 3 : aeh
 19 digits[2] = 4 , use i
 20 3 : aei
 21 digits[2] = 4 complete, return
 22 digits[1] = 3 , use f
 23 2 : af
 24 digits[2] = 4 , use g
 25 3 : afg
 26 digits[2] = 4 , use h
 27 3 : afh
 28 digits[2] = 4 , use i
 29 3 : afi
 30 digits[2] = 4 complete, return
 31 digits[1] = 3 complete, return
 32 digits[0] = 2 , use b
 33 1 : b
 34 digits[1] = 3 , use d
 35 2 : bd
 36 digits[2] = 4 , use g
 37 3 : bdg
 38 digits[2] = 4 , use h
 39 3 : bdh
 40 digits[2] = 4 , use i
 41 3 : bdi
 42 digits[2] = 4 complete, return
 43 digits[1] = 3 , use e
 44 2 : be
 45 digits[2] = 4 , use g
 46 3 : beg
 47 digits[2] = 4 , use h
 48 3 : beh
 49 digits[2] = 4 , use i
 50 3 : bei
 51 digits[2] = 4 complete, return
 52 digits[1] = 3 , use f
 53 2 : bf
 54 digits[2] = 4 , use g
 55 3 : bfg
 56 digits[2] = 4 , use h
 57 3 : bfh
 58 digits[2] = 4 , use i
 59 3 : bfi
 60 digits[2] = 4 complete, return
 61 digits[1] = 3 complete, return
 62 digits[0] = 2 , use c
 63 1 : c
 64 digits[1] = 3 , use d
 65 2 : cd
 66 digits[2] = 4 , use g
 67 3 : cdg
 68 digits[2] = 4 , use h
 69 3 : cdh
 70 digits[2] = 4 , use i
 71 3 : cdi
 72 digits[2] = 4 complete, return
 73 digits[1] = 3 , use e
 74 2 : ce
 75 digits[2] = 4 , use g
 76 3 : ceg
 77 digits[2] = 4 , use h
 78 3 : ceh
 79 digits[2] = 4 , use i
 80 3 : cei
 81 digits[2] = 4 complete, return
 82 digits[1] = 3 , use f
 83 2 : cf
 84 digits[2] = 4 , use g
 85 3 : cfg
 86 digits[2] = 4 , use h
 87 3 : cfh
 88 digits[2] = 4 , use i
 89 3 : cfi
 90 digits[2] = 4 complete, return
 91 digits[1] = 3 complete, return
 92 digits[0] = 2 complete, return
 93 adg
 94 adh
 95 adi
 96 aeg
 97 aeh
 98 aei
 99 afg
100 afh
101 afi
102 bdg
103 bdh
104 bdi
105 beg
106 beh
107 bei
108 bfg
109 bfh
110 bfi
111 cdg
112 cdh
113 cdi
114 ceg
115 ceh
116 cei
117 cfg
118 cfh
119 cfi
120 请按任意键继续. . .

 

posted @ 2018-10-09 17:13  Holly_U  阅读(238)  评论(0编辑  收藏  举报