トピック:
2〜9の数字のみを含む文字列を指定すると、それが表すことができるすべての文字の組み合わせを返します。回答は任意の順序で返すことができます。
数字から文字へのマッピングは次のようになります(電話ボタンと同じ)。1はどの文字にも対応しないことに注意してください。
例:
到入:数字= "23" 輸出出: ["ad"、 "ae"、 "af"、 "bd"、 "be"、 "bf"、 "cd"、 "ce"、 "cf"]
ソース:
問題解決のアイデア:バックトラック
各ループに入れられた文字を記録するパスを定義し、各番号に対応する文字のシーケンスを記録する文字列配列キーを定義します。
- 再帰的終了条件:パスのサイズは入力文字列のサイズと同じです
- 結果は条件を満たしています:終了が出力されます
- 剪定条件:なし
static string key[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
class Solution {
public:
vector<string> result;
string path;
vector<string> letterCombinations(string digits) {
result.clear();
path.clear();
if (digits.empty()) return result;
back(digits, 0);
return result;
}
void back(const string& digits, int start) {
if (path.size() == digits.size()) {
result.push_back(path);
return;
}
const string& p = key[digits[start] - '0'];
for (int i = 0; i < p.size(); i++) {
path.push_back(p[i]);
back(digits, start+1);
path.resize(path.size() - 1);
}
}
};