-22の特別なバックトラックLeetcode。ブラケット世代(括弧を生成します)
Nは、世代の数は括弧内に与えられている、あなたが関数を記述表し、ブラケットと効果的なのすべての可能な組み合わせを生成することが可能です。
例えば、nは所与= 3、結果を生成することです。
[
"((()))"、
"(()())"、
"(())()"、
"()(())"、
"()()()"
]
分析:Nを考えるには、ブラケットのすべての可能な組み合わせを生成します。
例えば、N = 3三のブラケットは、次に、2 * nに私達の時間の文字の数を停止しなければならない、最終的な長さが6であることが、発生する必要がある、すなわち、2 * N。
次は再帰関数を記述します。
公共 ボイド DFS(整数 nは、INTのステップ、文字列strは、int型、左int型{右) であれば(ステップ== N){ ans.add(STR)。 返します。 } であれば(左<N / 2 ){ DFS(N、ステップ + 1、STR + "("、1 +左、右); } もし(左> 右){ DFS(N、ステップ + 1、STR + " )」、左、右+ 1 )。 } }
左括弧の機能の数だけ左デポジットは、右括弧は今括弧内に格納された格納された権利、ステップ数の数であり、nは必要ブラケットの総数です。
最終ACコード:
クラスのソリューション{ 一覧 <文字列> ANS = nullを。 公共 ボイド DFS(整数 nは、INTのステップ、文字列strは、int型、左int型{右) であれば(ステップ== N){ ans.add(STR)。 返します。 } であれば(左<N / 2 ){ DFS(N、ステップ + 1、STR + "("、1 +左、右); } もし(左> 右){ DFS(N、ステップ + 1、STR + ")" 、左、右+ 1 )。 } } パブリックリストの<string> generateParenthesis(int型N){ ANS = 新規のArrayList <> (); DFS( 2 * nは、0、 ""、0,0 )。 戻るANSを。 } }