leetcode题目例题解析(十三)
Letter Combinations of a Phone Number
题目描述:
Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.Input:Digit string “23”
Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
题意解析:
这道题就是一个简单的递归解决排列组合的问题,注意的就是数字与字幕之间的对应转换
解题思路:
用递归的方式来解决,每一层处理一个数字所对应的情况
代码:
class Solution {
public:
char f(int d, int m) {
int k = d - '0';
if (k >= 8)
m += 1;//7对应的字母有四个,所以要+1
return 'a' + (k-2)*3 + m;
}
void solve(string& digits, string pre, int deep, int length, vector<string>& ans) {
if (deep == length) {
ans.push_back(pre);
} else {
string temp = pre;
int end;
if (digits[deep] == '9'||digits[deep] == '7')
end = 4;
else
end = 3;
for (int i = 0; i < end; i++) {
char s = f(digits[deep], i);
temp = pre;
temp += s;
solve(digits, temp, deep + 1, length, ans);
}
}
}
vector<string> letterCombinations(string digits) {
int length = digits.length();
vector<string> ans;
string pre;
if (length > 0)
solve(digits, pre, 0, length, ans);
return ans;
}
};
原题目链接:
https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/