17. Letter Combinations of a Phone Number(bfs,回溯)

Given a string containing digits from 2-9 inclusive, 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. Note that 1 does not map to any letters.

Example:

Input: "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 {
public:
    const string letterMap[10] = {
    "", // 0
    "", // 1
    "abc", // 2
    "def", // 3
    "ghi", // 4
    "jkl", // 5
    "mno", // 6
    "pqrs", // 7
    "tuv", // 8
    "wxyz", // 9
    };
    vector<string> res;
    void backtrack(string& digits, string& path, int start) {
        if(path.size()==digits.size()) {
            res.push_back(path);
            return;
        }
        for (int i = start; i< digits.size(); ++i) {
            int index = digits[i] - '0';
            string cur_s = letterMap[index];
            for(int j = 0; j < cur_s.size() ; ++j) {
                path.push_back(cur_s[j]);
                backtrack(digits,path,i + 1);
                path.pop_back();
            }
        }
    }
    vector<string> letterCombinations(string digits) {
        string path = "";
        if (digits=="") return res;
        backtrack(digits,path,0);
        return res;
    }
};

 

 

 1 class Solution {
 2     public List<String> letterCombinations(String digits) {
 3         LinkedList<String> res = new LinkedList<String>();
 4         if(digits.isEmpty()) return res;
 5         String[] mapping = new String[] {"0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
 6         res.add("");
 7         for(int i=0;i<digits.length();i++){
 8             int x=Character.getNumericValue(digits.charAt(i));
 9             while(res.peek().length()==i){
10                 String t = res.remove();
11                 for (char s :mapping[x].toCharArray())
12                     res.add(t+s);
13             }
14         }
15         return res;
16     }
17 }

 

posted @ 2018-07-15 16:13  乐乐章  阅读(495)  评论(0编辑  收藏  举报