问题:here
代码:here
思路:
这道题的思路就像是数数,对,比如15,我就从1,2,3,…一直遍历的15;但是我们这道题的进位方法和十进制不一样,要根据每个按键中字母的数量来控制进位。下面用动图来说明了程序中遍历顺序和数数的关系:)
接下来讲一个比较常规的方法:递归。我们一个一个地添加输入的按键,每次添加都把原来存在的组合和新的按键上的字母两两组合,就像树根的生长一样。代码如下:
vector<string> addLetter(vector<string> input, char digit){
vector<string> strs = { "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
int loc = digit - '2';
vector<string> result;
for (int i = 0; i < strs[loc].size(); i++){
if (input.size() == 0){
string temp;
temp += strs[loc][i];
result.push_back(temp);
}
else{
for (int j = 0; j < input.size(); j++){
string temp;
temp += input[j] + strs[loc][i];
result.push_back(temp);
}
}
}
return result;
}
vector<string> letterCombinations(string digits){
vector<string> result;
int digits_len = digits.size();
if (digits_len == 0) return result;
for (int i = 0; i < digits_len; i++){
result = addLetter(result, digits[i]);
}
return result;
}