IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Letter Combinations of a Phone Number

    armsword发表于 2014-11-22 14:08:57
    love 0

    由于这个月还没写博客,找道题应付下吧,主要原因是自己现在太忙了,得准备找工作啊,唉,弱的惨不忍睹。好吧,不抱怨了,进入正题,LeetCode上面的一道题,题目描述为:

    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.

    其实就是组合问题,如下图所示:

    如图所示,遍历完 1,2,3,就把a,d (g,h,i)遍历完了,之后回溯到e,就是个DFS搞定。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    #include ;
    #include ;
    #include ;
    using namespace std;
    class Solution
    {
    public:
    vector<string> letterCombinations(string digits)
    {
    int len = digits.size();
    result.clear();
    num[2] = "abc";
    num[3] = "def";
    num[4] = "ghi";
    num[5] = "jkl";
    num[6] = "mno";
    num[7] = "pqrs";
    num[8] = "tuv";
    num[9] = "wxyz";
    solve(digits,0,len);
    return result;
    }
    void solve(string &digits;,int i,int len)
    {
    if(i == len)
    {
    str[len] = '&#92;0';
    string temp = str;
    result.push_back(temp);
    return;
    }
    unsigned int j;
    int index = digits[i] - '0';
    for(j = 0; j < num[index].size(); j++)
    {
    str[i] = num[index][j];
    solve(digits,i+1,len);
    }
    }
    private:
    vector<string> result;
    string num[10];
    char str[1000];
    };
    int main()
    {
    Solution solution;
    string p;
    p = "23";
    vector<string> p1;
    p1 = solution.letterCombinations(p);
    vector<string>::iterator iter;
    for(iter=p1.begin();iter != p1.end();iter++)
    {
    cout<<*iter<
    }
    return 0;
    }

    最近开始集中精力做OJ了,唯一的感觉就是自己好弱,算法准备的有点晚了,有点找不上工作的节奏。算法也不是一朝一夕就能提高的,自己好好努力吧,即使实习拿不到dream offer,到正式找工作(9月份)还有时间努力,集中精力弥补自己弱点就可以了。



沪ICP备19023445号-2号
友情链接