【Leet Code】22. Generate Parentheses


‘(‘ と’)’ のペアの組み合わせを全て列挙する問題です。

再帰を用いた例

以下は、再帰を用いた実装例です

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        std::vector<std::string> return_value;
        generateParenthesis(n, n, "", return_value);
        return return_value;
    }

private:
    void generateParenthesis(int remaining_open, int remaining_close,
                const std::string& temp, std::vector<std::string>& output) {
        if (remaining_open == 0 && remaining_close == 0) {
            output.push_back(temp);
            return;
        }
        if (1 <= remaining_open) {
            generateParenthesis(remaining_open - 1,
                                remaining_close,
                                temp + "(",
                                output);
        }
        if (remaining_open < remaining_close) {
            generateParenthesis(remaining_open,
                                remaining_close - 1,
                                temp + ")",
                                output);
        }
    }
};

N = 2 の場合、generateParenthesis(int, int, const std::string&, std::vector<std::string>&) の実引数は以下のようになります

N=2の場合

少し複雑ですが、N = 3 になると以下のようになります

以上です!

,

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です