题意:Given a digit string, return all possible letter combinations that the number could represent.
Input:Digit string “23”
Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
思路:类似n进制数
AC代码:
vector<string> letterCombinations(string digits) {
string lnmap[] = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> ret;
if(digits.size() == 0)
return ret;
int ret_num = 1;
vector<int> base;
for(int i = 0; i < digits.size(); ++i){
if(digits[i] > '9' || digits[i] < '2'){
return ret;
}
ret_num *= (lnmap[(digits[i] - '0') - 2].size());
base.push_back(digits[i] - '0');
}
//cout << ret_num << endl;
for(int p = 0; p < ret_num; ++p){
int p_tmp = p;
string tmp("");
for(int q = 0; q < base.size() ; ++ q){
int base_size =lnmap[ base[q] -2 ] . size();
tmp += lnmap[base[q] - 2][p_tmp % base_size];
p_tmp /= base_size;
}
ret.push_back(tmp);
}
return ret;
}