电话号码的数字组合-Day002
题目:
九键输入法中 2~9 每个数字对应了若干个的字母,请找出给定数字组合对应的全部字母组合。
- 该题你返回的组合顺序可以不唯一
- 该题你返回的字母大小写都是可以的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AG46zuVV-1685757601277)(D:\beauty_graph\电话号码.png)]
示例1:
输入:"55"
返回值:["JJ","JK","JL","KJ","KK","KL","LJ","LK","LL"]
示例2:
输入:"3"
返回值:["D","E","F"]
解决方法00:
- 基本思想:
- 通过string数组的下标和数组存储的字符串将数字和字母对应,下标从2开始;
- dfs求解,定义递归函数haha(string& num,int i,int len);
- 结果用vector向量保存。
- 代码实现:
class Solution {
public:
string M[10];
vector<string> re;
char str[10];
vector<string> phoneNumber(string num) {
// write code here
int len = num.size();
M[2] = "ABC";
M[3] = "DEF";
M[4] = "GHI";
M[5] = "JKL";
M[6] = "MNO";
M[7] = "PQRS";
M[8] = "TUV";
M[9] = "WXYZ";
haha(num,0,len);
return re;
}
void haha(string& num,int i,int len)
{
if(i == len) //判段回溯条件
{
str[len] = '\0'; //这条代码不可缺少?
string t = str;
re.push_back(t);
return;
}
int idx = num[i] - '0';
for(int j = 0;j < M[idx].size(); ++ j)
{
str[i] = M[idx][j];
haha(num,i + 1,len); //dfs
}
}
};
haha(num,i + 1,len); //dfs
}
}
};