[LeetCode] Letter Combinations of a Phone Number(bfs)

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.

用queue实现bfs:

class Solution {
public:
    map<char,string> m;
    vector<string> letterCombinations(string digits) {
        vector<string> result;       
        m['2']="abc";
        m['3']="def";
        m['4']="ghi";
        m['5']="jkl";
        m['6']="mno";
        m['7']="pqrs";
        m['8']="tuv";
        m['9']="wxyz";
        queue<string> q;
        string s;
        q.push(s);
        result = bfs(q,digits);
        return result;
    }
    vector<string>  bfs(queue<string> q,string &digits){
        vector<string> result;
        
        int len = digits.size();
        if(len==0){
            string s;
            result.push_back(s);
            return result; 
        }
            

        while(!q.empty()){
            string s = q.front();
            int n = s.size();
            q.pop();
            if(n==len){
                result.push_back(s);
                continue;
            }

            string s0(s);
            char c = digits[n];
            int alphaNum = m[c].size();
            for(int i =0;i<alphaNum;i++){
                s.push_back(m[c][i]);
                q.push(s);
                s = s0;
            }    
        }
    
    return result;
    }
};

 

posted @ 2014-08-23 17:50  Xylophone  Views(432)  Comments(0Edit  收藏  举报