简单的递归。。。
Code:
vector<string> letterCombinations(string digits) {
if(digits.size() <= 0) return vector<string>();
map<int, string> mp;
mp[0] = " "; mp[1] = "@"; mp[2] = "abc"; mp[3] = "def";
mp[4] = "ghi"; mp[5] = "jkl"; mp[6] = "mno"; mp[7] = "pqrs";
mp[8] = "tuv"; mp[9] = "wxyz";
return letterCombinations_(digits, 0, mp);
}
vector<string> letterCombinations_(string digits, int pos, map<int, string> &mp){
int digit = digits[pos] - '0';
string str = mp[digit];
if(pos == digits.size() - 1){
vector<string> vstr(str.size());
for(int i = 0; i < vstr.size(); ++i) vstr[i] += str[i];
return vstr;
}
vector<string> vstr_ = letterCombinations_(digits, pos + 1, mp);
vector<string> vstr(vstr_.size() * str.size());
for(int i = 0; i < str.length(); ++i){
int size = vstr_.size();
for(int j = 0; j < size; ++j){
int idx = j + i * size;
vstr[idx] += str[i];
vstr[idx] += vstr_[j];
}
}
return vstr;
}