回溯
void backtrack(vector<string>& ans, map<char, string>& m,string& digits, int index, string& str) {
if (index == digits.length()) {
ans.push_back(str);//一个结束
}
else {
char digit = digits[index];//位数
string letters = m[digit];
for (auto letter : letters) {
str.push_back(letter);
backtrack(ans, m, digits, index + 1, str);//index实际上就是str当前的长度
str.pop_back();
}
}
}
vector<string> letterCombinations(string digits) {
vector<string> ans;
if (digits.empty())
return ans;
map<char, string> m;
m['2'] = "abc";
m['3'] = "def";
m['4'] = "ghi";
m['5'] = "jkl";
m['6'] = "mno";
m['7'] = "pqrs";
m['8'] = "tuv";
m['9'] = "wxyz";
string str;
backtrack(ans, m, digits, 0, str);
return ans;
}
回溯算法,根据长度确定是否到最后,否则向里加入
传引用,省空间