【C++】 电话号码的字母组合(LeetCode题目)

题目描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
已知数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].

解题思路:

1.若输入的字符串为空则直接返回。
if(index==digits.size())
       {
           strs.push_back(str);
               return ;
       }
2.若输入的字符串不为空,以“23”为例 即 string digits=“23”

1)创建输入字符映射出的字符串数组
string letterMap[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
2)用 index 找到字符 2 从而找到映射的字符串
string letters=letterMap[digits[index]-'0'];
3)取出 2映射的字符串的第一个字符,与index+1 找到的字符 3映射的字符串的每个字符用 “+” 进行组合

//i=0时 letters[0]是 2的第一个字符
			for(size_t i=0;i<letters.size();i++)         
//index+1作为参数,找到字 3 从而找到映射的字符串
		 combinStr(digits,index+1,str+letters[i],strs);       

4)用递归子问题的思想,将 2映射的字符串的每个字符,与 3映射的字符串的每个字符用 “+” 进行组合
5)组合字符串放在vector < string> 中,返回vector 即可

代码实现

// 创建要映射的字符串数组 
string letterMap[10]={" "," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
class Solution {
public:
    void combinStr(const string&digits,size_t index,const string&str,vector <string>&strs)
    {
       if(index==digits.size())
       {
           strs.push_back(str);
               return ;
       }
        string letters=letterMap[digits[index]-'0'];
        for(size_t i=0;i<letters.size();i++)
        {
            combinStr(digits,index+1,str+letters[i],strs);
        }
    }
    vector<string> letterCombinations(string digits) {
      vector <string> strs;
        if(digits.empty())
            return strs;
        size_t index=0;
        string str;
         //递归子问题组合字符串
        combinStr(digits,index,str,strs);
        return strs;
        
    }
};

猜你喜欢

转载自blog.csdn.net/ly_6699/article/details/88605239