题意:现在有一个数字的表盘,类似与九宫格输入法,给定一组数字,让你求这组数字可能组合的字符串,1为"",2为"abc",3为"def",......
其实这道题也可以暴力破解,只要处理好1这个数字就OK了,剩下其他的就直接循环递归就OK,创建几个变量来存储组合的字符串,满足递归退出条件时就将字符串压入vector中,最后返回vector.
#include "iostream"
#include "stdlib.h"
#include "string.h"
#include "map"
#include "vector"
using namespace std;
char str[10][5] = {" ","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
class Solution {
public:
vector<string> letterCombinations(string digits) {
string reStr = "";
length = digits.size();
if(length == 0)
return result;
getStr(digits,0,reStr);
return result;
}
private:
vector<string> result;
int length;
void getStr(string digits,int index,string reStr)
{
//cout<<"1"<<endl;
if(index>=length)
{
result.push_back(reStr);
return;
}
int sNum = digits[index] - '0';
while(sNum == 1&&(index<(length-1)))
{
index++;
sNum = digits[index] - '0';
}
if((index == length-1)&&(sNum == 1))
{
index++;
getStr(digits,index,reStr);
}
for(int i = 0;i<strlen(str[sNum]);i++)
{
index++;
getStr(digits,index,reStr+str[sNum][i]);
index--;
}
return;
}
};
int main()
{
Solution test;
vector<string> result;
string testStr;
testStr = "000022141";
result = test.letterCombinations(testStr);
//result.push_back("abgh");
cout<<result.size()<<endl;
for (vector<string>::size_type i = 0; i < result.size(); i++)
{
cout<<"("<<result[i]<<")"<<endl;
}
return 0;
}