Cool说丨力扣17

简介: 17. 电话号码的字母组合

17. 电话号码的字母组合,看完毫无头绪

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例:

输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

第一版 借助队列

执行用时 :4 ms, 在所有 C++ 提交中击败了80.09%的用户

内存消耗 :8.9 MB, 在所有 C++ 提交中击败了15.91%的用户

   vector<string>result;//用于输出向量

   map<char, string>m= { {'2',"abc" },{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"mno"},{'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"} };//映射map哈希表

   intsize=digits.size();//输入字符串产长度

   queue<string>que;//新建队列

   //先将第一个元素对应的码表入队

   for (intj=0; j<m[digits[0]].size(); j++)

   {

       stringstemp;

       stemp.push_back(m[digits[0]][j]);

       que.push(stemp);//string入队

   }

   strings;//用于存储队头元素

   for (inti=1; i<size; i++)

   {

       intlength=que.size();//当前队列长度

       while (length--)

       {

           for (intj=0; j<m[digits[i]].size(); j++)

           {

               s=que.front();

               s=s+m[digits[i]][j];//队头元素加上新元素

               que.push(s);//入队

           }

           que.pop();//队头出队

       }

   }

   while (!que.empty())

   {

       result.push_back(que.front());//队头元素存储至res

       que.pop();//队头出队

   }

   returnresult;//返回

第二版,稍微节省了一点空间

执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗 :8.7 MB, 在所有 C++ 提交中击败了37.35%的用户

vector<string>result;//用于输出向量

   map<char, string>m= { {'2',"abc" },{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"mno"},{'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"} };//映射map哈希表

   unsignedi,j,length,size=digits.size();//输入字符串产长度

   queue<string>que;//新建队列

   //先将第一个元素对应的码表入队

   stringstemp;

   for (j=0; j<m[digits[0]].size(); j++)

   {      

       stemp.push_back(m[digits[0]][j]);

       que.push(stemp);//string入队

       stemp.clear();

   }

   for (i=1; i<size; i++)

   {

       length=que.size();//当前队列长度

       while (length--)

       {

           for (j=0; j<m[digits[i]].size(); j++)

           {

               stemp=que.front();

               stemp=stemp+m[digits[i]][j];//队头元素加上新元素

               que.push(stemp);//入队

           }

           que.pop();//队头出队

       }

   }

   while (!que.empty())

   {

       result.push_back(que.front());//队头元素存储至res

       que.pop();//队头出队

   }

   returnresult;//返回


目录
相关文章
|
人工智能 C# C++
Cool说丨力扣153、454
153. 寻找旋转排序数组中的最小值 454. 四数相加 II
192 1
|
C# C++
Cool说丨力扣287/792/378
关注博主,获取更多知识
166 0
|
C# C++ 索引
Cool说丨力扣162
162. 寻找峰值
195 0
|
存储 C# C++
Cool说丨力扣29/34
关注博主。获取更多知识
165 0
|
存储 C# C++
Cool说丨力扣392
392. 判断子序列
140 0
|
C# C++
Cool说丨力扣744、704
744. 寻找比目标字母大的最小字母 704. 二分查找
209 0
|
C#
Cool说丨力扣475
475. 供暖器
165 0
|
机器学习/深度学习 算法 C#
Cool说丨力扣202
202. 快乐数
155 0
|
C#
Cool说丨力扣167
167. 两数之和 II - 输入有序数组
139 0
|
C# C++
Cool说丨力扣374、441
441. 排列硬币 374. 猜数字大小
156 0