zoukankan      html  css  js  c++  java
  • 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 请按任意键继续. . .
  • 相关阅读:
    .net的Timer
    WPF笔记(9)模板(Template)
    WPF笔记(6)数据绑定(DataBinding)
    WPF笔记(8)样式(Styles)
    WPF笔记(7)资源(Resources)
    程序无法退出调试
    WPF笔记(1)XAML和code概述
    ASP.NET程序中常用编程代码(1)
    在ASP.NET中防止注入攻击
    ASP.NET程序中常用编程代码(2)
  • 原文地址:https://www.cnblogs.com/Holly-blog/p/9761512.html
Copyright © 2011-2022 走看看