[バックトラッキング] [leetcode]電話番号の文字の組み合わせ

トピック:

2〜9の数字のみを含む文字列を指定すると、それが表すことができるすべての文字の組み合わせを返します。回答は任意の順序で返すことができます。

数字から文字へのマッピングは次のようになります(電話ボタンと同じ)。1はどの文字にも対応しないことに注意してください。

例:

到入:数字= "23"
輸出出: ["ad"、 "ae"、 "af"、 "bd"、 "be"、 "bf"、 "cd"、 "ce"、 "cf"]

ソース:

17.電話番号の文字の組み合わせ

問題解決のアイデア:バックトラック

各ループに入れられた文字を記録するパスを定義し、各番号に対応する文字のシーケンスを記録する文字列配列キーを定義します。

  • 再帰的終了条件:パスのサイズは入力文字列のサイズと同じです
  • 結果は条件を満たしています:終了が出力されます
  • 剪定条件:なし
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);
        }
    }
};

 

おすすめ

転載: blog.csdn.net/hbuxiaoshe/article/details/115008884