每日算法之十七:Letter Combinations of a Phone Number

来源:互联网 发布:手机测经纬度软件 编辑:程序博客网 时间:2024/06/10 17:09

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.

下面给出两种方法,本质上是一样的

class Solution {  //static declare and definition with local scope  public:      void letterCombinations_aux(int step, string& path, vector<string>& ans, const string& digits)      {          //pay attention to this kind of statement          const static string strT[10] = {"","","abc","def","ghi","jkl","mno","qprs","tuv","wxyz"};          if(step == digits.size())          {              ans.push_back(path);              return;          }          for(int i = 0; i < strT[digits[step]-'0'].size(); ++i)          {              path.push_back(strT[digits[step]-'0'][i]);              letterCombinations_aux(step+1, path, ans, digits);              path.pop_back();          }      }      vector<string> letterCombinations(string digits) {          // Start typing your C/C++ solution below          // DO NOT write int main() function          string path;          vector<string> ans;          int step = 0;          letterCombinations_aux(step, path, ans, digits);          return ans;      }  };  

第二种:

class Solution {private:    map<char, vector<char> > dict;    vector<string> ret;public:    void createDict()    {        dict.clear();        dict['2'].push_back('a');        dict['2'].push_back('b');        dict['2'].push_back('c');        dict['3'].push_back('d');        dict['3'].push_back('e');        dict['3'].push_back('f');        dict['4'].push_back('g');        dict['4'].push_back('h');        dict['4'].push_back('i');        dict['5'].push_back('j');        dict['5'].push_back('k');        dict['5'].push_back('l');        dict['6'].push_back('m');        dict['6'].push_back('n');        dict['6'].push_back('o');        dict['7'].push_back('p');        dict['7'].push_back('q');        dict['7'].push_back('r');        dict['7'].push_back('s');        dict['8'].push_back('t');        dict['8'].push_back('u');        dict['8'].push_back('v');        dict['9'].push_back('w');        dict['9'].push_back('x');        dict['9'].push_back('y');        dict['9'].push_back('z');    }        void dfs(int dep, int maxDep, string &s, string ans)    {        if (dep == maxDep)        {            ret.push_back(ans);            return;        }                for(int i = 0; i < dict[s[dep]].size(); i++)            dfs(dep + 1, maxDep, s, ans + dict[s[dep]][i]);    }        vector<string> letterCombinations(string digits) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        ret.clear();        createDict();        dfs(0, digits.size(), digits, "");        return ret;    }};





0 0
原创粉丝点击