(遡及)Leetcode 22.括弧生成java
1234 ワード
与える n カッコを生成する対数を表します.可能なカッコの組み合わせをすべて生成できるように関数を書いてください.
たとえば、 n=3、生成結果:
理解しなければならないことがあります.私はもう注釈に書きました.
成功
詳細を表示
実行時間: 3 ms、Generate ParenthesesのJavaコミットで84.90%のユーザーを破った
メモリ消費量: 38.3 MB、Generate ParenthesesのJavaコミットで56.63%のユーザーを破った
たとえば、 n=3、生成結果:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
私が理解している遡及は、次の操作を行うときに現在の状態に戻り、この問題のコードは遡及のステップを一目で見ることができません.しかし、よく考えてみると、左かっこを生成するときにstr+'(')と伝わり、strの値は変わりません.右かっこを操作するときはstr自体の値で操作するのと同じです.理解しなければならないことがあります.私はもう注釈に書きました.
成功
詳細を表示
実行時間: 3 ms、Generate ParenthesesのJavaコミットで84.90%のユーザーを破った
メモリ消費量: 38.3 MB、Generate ParenthesesのJavaコミットで56.63%のユーザーを破った
class Solution {
public List generateParenthesis(int n) {
List res = new ArrayList();
if(n == 0)
return res;
String str = new String();
helper(res, str, n, n);
return res;
}
private void helper(List list, String str, int l, int r){
if(l==0 && r==0){
list.add(str);
return ;
}
if(l>0)
helper(list, str+'(', l-1, r);
// 。
// ,ll)
helper(list, str+')', l, r-1);
}
}