LeetCode OJ:Letter Combinations of a Phone Number

来源:互联网 发布:在淘宝卖什么东西好 编辑:程序博客网 时间:2024/06/06 08:58

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.

递归:

class Solution {    vector<string> result;    string str;public:    void dfs(int k,string &digits,map<int,string> &mp){        if(k==digits.size()){            result.push_back(str);            return;        }        for(int i=0;i<mp[digits[k]-'0'].size();i++){            str+=mp[digits[k]-'0'][i];            dfs(k+1,digits,mp);            str.resize(k);        }            }    vector<string> letterCombinations(string digits) {        map<int,string> mp;        mp[2]="abc";mp[3]="def";        mp[4]="ghi";mp[5]="jkl";mp[6]="mno";        mp[7]="pqrs";mp[8]="tuv";mp[9]="wxyz";        dfs(0,digits,mp);        return result;    }};


迭代:

class Solution {public:    const vector<string> keyboard{" ","","abc","def",            "ghi","jkl","mno","pqrs","tuv","wxyz"};    vector<string> letterCombinations(string digits) {        vector<string> result(1,"");        for(auto d : digits){            const size_t n=result.size();            const size_t m=keyboard[d-'0'].size();                        result.resize(n*m);            for(size_t i=0;i<m;++i)                copy(result.begin(),result.begin()+n,result.begin()+n*i);                            for(size_t i=0;i<m;++i){                auto begin=result.begin();                for_each(begin+n*i,begin+n*(i+1),[&](string &s){                    s+=keyboard[d-'0'][i];                });            }        }        return result;    }};



0 0