1、描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
来源:力扣(LeetCode)
链接:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2、关键字
键盘数字对应的字符串,输出,
3、思路
一看就是回溯,
感觉这个简单点
去看代码
4、notes
先把board字符串数组搞好,
然后根据输入的数字,去对应到board上,进行回溯
5、复杂度
时间:O【3的(n)次方 * 4 的(m)次方】
空间:【m+n】 m输入中对应 3 个字母的数字个数,n 是4的个数
6、code
class Solution {
public:
vector<string> res;
string tem;
vector<string> board={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
void traceback(int pos,string digits){
if(pos == digits.size()){ // 递归深度,当再次调用的时候pos会++,所以会有等于的时候。
res.push_back(tem);
return;
}
int num = digits[pos] - '0'; // 获取数字,如当num == 2
for(int i = 0; i < board[num].size(); i++){ // 遍历当前数字对应的字符串,如:abc,
tem += board[num][i]; // 先获取a,
traceback(pos+1,digits); // 下标后移(从0--> 1 ),递归去获取数字3对应的字符串,
tem.pop_back();
}
}
vector<string> letterCombinations(string digits) { // 比如输入 23
if(digits.size() == 0) return res;
traceback(0,digits);
return res;
}
};