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.
本題利用佇列實現即可
如“23”,
首先獲取2
然後相對列中插入a,b,c
然後彈出a,在a後面附件下面一個數字,即ad,ae,af,插入佇列即可
vector<string> letterCombinations(string digits) { vector<string> res; if(digits.length() == 0) {res.push_back("");return res;} string num_map[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; queue<string> que; int n = num_map[digits[0]-'0'].length(); if(n == 0) que.push(""); else{ for(int i = 0; i <n; ++ i){ string tmp = string(1,num_map[digits[0]-'0'][i]); que.push(tmp); } } int index =1; while(!que.empty() && index < digits.length()){ int cnt = que.size(); while(cnt-->0){ string a = que.front();que.pop(); int len = num_map[digits[index]-'0'].length(); if(len == 0) que.push(a); else{ for(int i = 0; i < len; ++ i ){ string tmp = a+num_map[digits[index]-'0'][i]; que.push(tmp); } } } index++; } while(!que.empty()) {res.push_back(que.front());que.pop();} return res; }