/*
Sologala @github https://github.com/Sologala/LeetCode.git
LeetCode 17. 电话号码的字母组合
*/给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
##思路:
ac_code
class Solution {
public:
const char c[10][4]={{'0'},{'0'},
{'a','b','c'},{'d','e','f'},
{'g','h','i'},{'j','k','l'},
{'m','n','o'},{'p','q','r','s'},
{'t','u','v'},{'w','x','y','z'}};
const int cnt[10]={0,0,3,3,3,3,3,4,3,4};
bool add(vector<int> &d,string &digits){
int tag =1;
for(int i =0;i<d.size();++i){
d[i] =d[i]+tag;
if(d[i]>=cnt[digits[i]-'0']){
tag =1;
d[i]=0;
}
else {
tag= 0;
}
}
return tag==0;
}
vector<string> letterCombinations(string digits) {
vector<string> ret;
if(digits.size()==0) return ret;
vector<int> d(digits.size(),0);
do{
string temp;
for(int i=0;i<digits.length();++i){
temp.push_back(c[digits[i]-'0'][d[i]]);
}
ret.push_back(temp);
}while(add(d,digits)==true);
return ret;
}
};