LEETCODE: 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.


使用递归来解决这个办法:

把当前字符的所有可能性记录下来,放到前面已经处理得到的字符上。对于未处理的,在我们找到的当前字符的所有可能的每一种可能性上,递归调用当前的函数,把新的已得到的字符串,新的未处理字符串传入。


char allChar[12] = {' ','%', 'a', 'd', 'g', 'j', 'm', 'p', 't', 'w', '+', '^'};
int digital[12] = {1, 1, 3, 3, 3, 3, 3, 4, 3, 4, 1, 1};

class Solution {
public:
   void letterCombinationsInternal(string digits, string preprocess, vector<string> &results) {
      if(digits.length() == 0) {
         results.push_back(preprocess);
         return;
      }

      for(int jj = 0; jj < digital[digits[0] - '0']; jj ++) {
          char newch = allChar[digits[0] - '0'] + jj;
          string newpreprocess = preprocess + newch;
          letterCombinationsInternal(digits.substr(1,digits.length() - 1), newpreprocess, results);
      }
   }

   vector<string> letterCombinations(string digits) {

      vector<string> results;
      letterCombinationsInternal(digits, "", results);
      return results;
   }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值