以下为回溯法实现:
void backtracking(const vector<vector<char>>& table, vector<string>& res, string& local, int index, const string& digits) {
if(index==digits.size())
res.push_back(local);
else
for(int i=0;i<table[digits[index]-'0'].size();i++) {
local.push_back(table[digits[index]-'0'][i]);
backtracking(table, res, local, index+1, digits);
local.pop_back();//删除字符串的最后一个字符
}
}
虽然非递归方法看起来更巧妙,但此处的实际效率不如递归法,存在冗余部分。