题目链接 https://oj.leetcode.com/problems/letter-combinations-of-a-phone-number/
乍看貌似不难,第一印象采用循环,可是循环用起来很麻烦,因为输入的按键组合中按键个数不确定。比较直观的思路是采用递归来做,不过递归的思路我也是理解了好久才想通,还是需要静下心来思考,思路是循环输出每一个按键上的所有字母,每输出一个字母,在将下个按键上的字符依次与其配对,在进行下一个按键的字符循环配对。。。便是递归的思路,在实际执行的时候,每次将按键组合第一个按键去除,然后进行下一次递归调用,这样每次进行循环配对的都是按键组合中第一个键对应的字符串。代码如下:
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> result;
string strs[8]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
RecursionMethod(strs,digits,result,"");
return result;
}
void RecursionMethod(string *strs,string digits,vector<string> &result,string temp)
{
if(digits.length() == 0)
{
result.push_back(temp);
return;
}
for(int i=0; i<strs[digits[0]-'2'].length(); i++)
{
temp += strs[digits[0]-'2'][i];
RecursionMethod(strs,digits.substr(1,digits.length()-1),result,temp);
temp = temp.substr(0,temp.length()-1);
}
}
};