2〜9の数字のみを含む文字列を指定すると、それが表すことができるすべての文字の組み合わせを返します。
数字から文字へのマッピングは次のようになります(電話ボタンと同じ)。1はどの文字にも対応しないことに注意してください。
例:
入力: "23"
出力:["ad"、 "ae"、 "af"、 "bd"、 "be"、 "bf"、 "cd"、 "ce"、 "cf"]
説明:
上記にもかかわらず回答は字句順に並べられていますが、回答が出力される順序を選択できます。
出典:LeetCode(LeetCode)
リンク
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
コード:
class Solution {
public:
string t,s[8]={
"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
//只有2-9按键有字母
vector<string> ans;
void dfs(string digits,int index)
{
if(index==digits.size()) //下标到了digits长度,算一个组合
{
ans.push_back(t); //加入ans数组
return;
}
//digits[index]-'0'-2 找到按键可以敲出的字符
for(int i=0;i<s[digits[index]-'0'-2].size();i++) //
{
t+=s[digits[index]-'0'-2][i]; //累加字符
dfs(digits,index+1); //下标加一
t.erase(t.end()-1); //减去最后一个字符
}
}
vector<string> letterCombinations(string digits) {
if(!digits.size()) return ans; //空字符
dfs(digits,0);
return ans;
}
};