108. ブラケットの生成
タイトルリンク
ソース:
リンク(LeetCode):https: //leetcode-cn.com/problems/generate-parentheses
タイトルの説明
数値nは括弧の生成の対数を表します。括弧の可能なすべての効果的な組み合わせを生成する関数を設計してください。
例:
输入:n = 3
输出:[
"((()))"、
"(()())"、
"(())()"、
"()(())"、
"()()( ) "
]
もっと難しい
括弧生成の規則性を調べる
トピック分析
- ブラケットは、左ブラケット(左)と右ブラケット(右)に分かれています。
- nによれば、n対の括弧の生成を見ることができます:左<= n、右<=左。
- 大括弧を生成する関数を作成します。左大括弧と右大括弧の数を記録し、生成された大括弧をresに格納します。
- 境界:左大括弧の数はnを超えず、右大括弧の数は左大括弧の数を超えません。つまり、左<n、右<左
- 当左== n &&右== n時、return res;
/ ** * @param {number} n * @return {string []} * / let generateParenthesis =(n)=> { let res = []; function dfs(s、left、right){ if(left == n && right == n)return res.push(s); if(left <n)dfs(s + '('、left + 1、right); if(right <left)dfs(s + ')'、left、right + 1); } dfs( ''、0、0); 解像度を返す; }