zoukankan      html  css  js  c++  java
  • 17. Letter Combinations of a Phone Number

    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.

    BFS:

     1 class Solution {
     2 public:
     3     vector<string> letterCombinations(string digits)
     4     {
     5         vector<string> vs = {"", "", "abc", "def","ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
     6         vector<string> result;
     7         result.push_back("");
     8         if(digits.empty()) return {};
     9         for (size_t i = 0; i < digits.size(); ++i) {
    10             vector<string> qc;
    11             string strtmp(vs[digits[i]-'0']);
    12             for (size_t j = 0; j < strtmp.size(); ++j) {
    13                 for (size_t k = 0; k < result.size(); ++k) {
    14                     qc.push_back(result[k] + strtmp[j]);
    15                 }
    16             }
    17             result = qc;
    18         }
    19         return result;
    20     }
    21 };
    View Code

    2% 3ms

    对于含有0和1的项,比如"123",程序运行结果不符合预期.但是却通过OJ,所以此题有待严谨.

    BFS:

    class Solution {
    public:
        vector<string> letterCombinations(string digits)
        {
            vector<string> vs = {"", "", "abc", "def","ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
            vector<string> result;
            result.push_back("");
            if(digits.empty()) return {};
            for (size_t i = 0; i < digits.size(); ++i) {
                vector<string> qc;
                string strtmp(vs[digits[i]-'0']);
                for (size_t j = 0; j < strtmp.size(); ++j) {
                    for (size_t k = 0; k < result.size(); ++k) {
                        qc.push_back(result[k] + strtmp[j]);
                    }
                }
                result.swap(qc);//swap does not take memory copy 
            }
            return result;
        }
    };

    the swap method thought by  asbear

    65.33% 0ms

    backtrackiing:

    class Solution { //by luming.zhang.75(Creater) redace85(Modifier) 
    public:
        vector<string> letterCombinations(string digits) {
            vector<string> ret;
            if(0>=digits.size()) return ret;
        
            const string map[]={"0","1","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
            backTrackingFun(map,digits,"",ret);
        
            return ret;
        }
        
        void backTrackingFun(const string m[], const string &digits, string r, vector<string> &ret){
            int c=r.size();
            if(digits.size()==c){
                ret.push_back(r);
                return;
            }
        
            auto str = m[digits.at(c)-48]; // '0' = 48
            for(auto it=str.cbegin();it!=str.cend();++it){
                r.push_back(*it);
                backTrackingFun(m,digits,r,ret);
                r.pop_back();
            }
        }
    };
    r size:0
    a
    a
    r size:1
    d
    ad
    r size:2
    r pop back:d
    e
    ae
    r size:2
    r pop back:e
    f
    af
    r size:2
    r pop back:f
    r pop back:a
    b
    b
    r size:1
    d
    bd
    r size:2
    r pop back:d
    e
    be
    r size:2
    r pop back:e
    f
    bf
    r size:2
    r pop back:f
    r pop back:b
    c
    c
    r size:1
    d
    cd
    r size:2
    r pop back:d
    e
    ce
    r size:2
    r pop back:e
    f
    cf
    r size:2
    r pop back:f
    r pop back:c
    ad
    ae
    af
    bd
    be
    bf
    cd
    ce
    cf

    2% 3ms

  • 相关阅读:
    Java基础教程:多线程杂谈——双重检查锁与Volatile
    LeetCode:打印零与奇偶数【1116】
    Java基础教程:多线程基础(6)——信号量(Semaphore)
    LeetCode:交替打印【1115】
    做一件事情的3个关键指标:兴趣、能力和回报
    做一件事情的3个关键指标:兴趣、能力和回报
    Retry模式
    Java技术——String类为什么是不可变的
    2017战略No.2:开始电子化记账
    2017战略No.2:开始电子化记账
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/7202869.html
Copyright © 2011-2022 走看看