指定したオブジェクトではなくDFSパラメータを指定する必要がある場合は[leet 22]
1962 ワード
leetcode 22 Generate Parentheses
私は通常DFSを回すときに以下の方法を使用します.
1.チェックする変数にルートをマップする
2.根元から次の到達可能な位置を選択(togo)
3.対togo:dfs for loc in togoを実行する:
この問題では,これを防止するために変数に割り当てず,再帰関数に直接値を付与する.リフに一度行っても、定価で出発するので、希望の探索ができます.
nを使用してカッコに有効なすべてのカッコ文字を作成
PSEUDO 1前後にそれぞれ()を入れ、中間2 n-2個の位置からn-1個の組み合わせを抽出し、「(」が入るindex pool(すべて可能なサンプル) poolの全ての場合、isValid ソリューション1も時間制限で通過しますが、位置決め長が長いため、プールコードは次のgithubを参照してください.
PSEUDO 2DFSは、pathまたはcumに値を指定するとループで変更が続くので、直接関数を挿入する形で
path+=')',cum-=1のようです.
固定DFSの変数
私は通常DFSを回すときに以下の方法を使用します.
1.チェックする変数にルートをマップする
2.根元から次の到達可能な位置を選択(togo)
3.対togo:dfs for loc in togoを実行する:
def helper(path, root, cum):
nonlocal ans, n
if len(path)==n:
ans.append(path)
return
path.append(root)
cum += root
if cum == 0: togo = [1]
if cum == n: togo = [-1]
else: togo[-1, 1]
for loc in togo:
dfs_helper(path, loc, cum)
しかし、これで初めてリフに行って、2番目のリフを探したとき、pathはもういっぱいになりました.ただし、戻る前にpathを初期化すると、次のreproveのナビゲーションもpath=Noneの状態で再開されないため、これは不可能である.この問題では,これを防止するために変数に割り当てず,再帰関数に直接値を付与する.リフに一度行っても、定価で出発するので、希望の探索ができます.
if cum == 0:
dfs_helper(str1+'(', cum+1)
elif cum == n:
dfs_helper(str1+')', cum-1)
else:
dfs_helper(str1+'(', cum+1)
dfs_helper(str1+')', cum-1)
Question
nを使用してカッコに有効なすべてのカッコ文字を作成
Solution
PSEUDO 1
PSEUDO 2
path+=')',cum-=1のようです.
def sol_2(n):
ans = list()
def dfs_helper(str1, cum):
nonlocal ans, n
if len(str1) == n*2:
if cum == 0:
ans.append(str1)
return
if cum == 0:
dfs_helper(str1+'(', cum+1)
elif cum == n:
dfs_helper(str1+')', cum-1)
else:
dfs_helper(str1+'(', cum+1)
dfs_helper(str1+')', cum-1)
dfs_helper(str(), 0)
return ans
Reference
この問題について(指定したオブジェクトではなくDFSパラメータを指定する必要がある場合は[leet 22]), 我々は、より多くの情報をここで見つけました https://velog.io/@jonas-jun/leet22-DFS-parenthesesテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol