c++[001]

Posted 心砚时间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++[001]相关的知识,希望对你有一定的参考价值。

从今天开始我将在这里为大家每日推送一个算法题目,运用语言为c++。

题目(选自LeetCode):
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合(即九键按键的组合,如图)。

例如:输入:"23"
          输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
代码
#include <iostream>#include <vector>#include <string>#include <queue>using namespace std;int main(){ string ss; string s[]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; vector <string> v1(s,s+8); queue <string> q1; cout<<"请输入一个数字字符串(2-9):"; cin>>ss; for(int i=0;i<ss.length();i++){ int j=ss[i]-'0';//得出字符串里每个数字 string sss=v1[j-2];//得出数字所对应的字母序列 if(i==0){ string init_s; for(int k=0;k<sss.length();k++){ init_s=sss[k]; q1.push(init_s); } } else{ string fr=q1.front();//记录队首元素 while(fr.length()<i+1){//判断队头元素的长度 q1.pop(); for(int k=0;k<sss.length();k++){ q1.push(fr+sss[k]); } fr=q1.front();//更新队头 } } } vector <string> v2; while(!q1.empty()){ v2.push_back(q1.front()); q1.pop(); } cout<<"它能表示的所以字母组合有:"<<endl; vector <string>::iterator it; for(it=v2.begin();it!=v2.end();it++){ cout<<*it<<" "; } cout<<endl; return 0;}
注解
  • 本题有两种思路,今天推送的为用队列的思想,另一种方法为回溯法,感兴趣读者请自行研究。

  • 本题还用到了c++中STL里的vector容器和queue。

  • 代码主要思想为:将第一个数字对应的字母入队,之后将队首元素与下个数字对应的字母分别匹配,最终队中元素即为所求。




谢谢大家阅读!

以上是关于c++[001]的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段 C++ 的说明

C++ 代码片段执行

c++[001]

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

C++ 代码片段(积累)

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情