力扣 17. 电话号码的字母组合
C++题解: 递归法。
-
确定回溯函数参数:首先需要一个字符串s来收集叶子节点的结果,一个字符串数组result保存起来,定义为全局变量。参数为题目中给的string digits,和一个用来记录第几个元素ind。 确定终止条件:path达到输入数字个数即可停止。 确定单层遍历逻辑:确定ind指向的数字,并对其对应的字符集进行遍历。对path进行回溯。
class Solution {
public:
vector<string> res;
string path;
void backtracking(string digits, int ind) {
int len = digits.size();
if(path.size() == len) {
res.push_back(path);
return;
}
char j = a;
int num = 0;
if(digits[ind] == 2) {j = a; num = 3; }
if(digits[ind] == 3) {j = d; num = 3; }
if(digits[ind] == 4) {j = g; num = 3; }
if(digits[ind] == 5) {j = j; num = 3; }
if(digits[ind] == 6) {j = m; num = 3; }
if(digits[ind] == 7) {j = p; num = 4; }
if(digits[ind] == 8) {j = t; num = 3; }
if(digits[ind] == 9) {j = w; num = 4; }
for(int k = 0; k < num; k++) {
path.push_back(j);
j = j+1;
backtracking(digits, ind+1);
path.pop_back();
}
return;
}
vector<string> letterCombinations(string digits) {
int len = digits.size();
if(len == 0) return res;
backtracking(digits, 0);
return res;
}
};
下一篇:
C语言基础知识总结大全(四)
