17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 17_telephone_keypad.png 示例:

  1. 输入:"23"
  2. 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

代码实现

  1. #include<map>
  2. #include<string>
  3. class Solution {
  4. public:
  5. map<char,string> numMap;
  6. vector<string> res;
  7. string ori_digits;
  8. int digits_len;
  9. void dep(string cur,int index){
  10. if(index == digits_len){
  11. res.push_back(cur);
  12. return;
  13. }
  14. char map_index = ori_digits[index];
  15. int bra_len = numMap[map_index].length();
  16. for(int i=0;i<bra_len;i++){
  17. string acc = cur + numMap[map_index][i];
  18. dep(acc,index+1);
  19. }
  20. }
  21. vector<string> letterCombinations(string digits) {
  22. ori_digits = digits;
  23. digits_len = digits.length();
  24. if(digits_len == 0)
  25. return res;
  26. numMap['2']="abc";
  27. numMap['3']="def";
  28. numMap['4']="ghi";
  29. numMap['5']="jkl";
  30. numMap['6']="mno";
  31. numMap['7']="pqrs";
  32. numMap['8']="tuv";
  33. numMap['9']="wxyz";
  34. dep("",0);
  35. return res;
  36. }
  37. };