A. 問題の説明
numRowsの数ヤンホイトライアングルと世代前の非負整数numRowsの数、与えられました。
パスカルの三角形では、各番号は、その左上と右上の数です。
例:
入力:5
出力:
[
[1]
[1,1]
[1,2,1]
[1,3,3,1]、
[1,4,6,4,1]
]
II。問題解決のためのアイデア
この質問4:それを解決するために、再帰的なメソッドを使用して。
工程A:再帰関数の構築(リストメモリ内のグローバル結果、ローカル変数のデータ記憶層の結果を、層の数は、Tacketは、層の総数を表し)
ステップ2:再帰関数、もし数> tacket再帰的に終了、そうでなければNEWDATA構築一時リスト、数1ビットに隣接する二つの第二NEWDATAに格納されたデータの数を追加する順番にパスカルの三角形の特性に応じてその後、最初と最後の1ビットを追加します。ステップ2を再帰的に繰り返されます。
ステップ3:もし数> tacket再帰的に終わりまで。リターンリスト。
III。結果
実行時:1ミリ秒は、Javaの提出内のすべてのユーザーの98.50パーセントを打ちます
メモリ消費量:34メガバイトは、Javaの提出内のすべてのユーザーの26.10パーセントを破りました
IV。Javaコード
クラスのソリューション{ 公共リスト<リスト<Integer型>>生成(int型のnumRowsの数){ リスト <リスト<Integer型>>一覧= 新しいのArrayList <リスト<Integer型>> (); もし(numRowsの数が0 == ){ 戻りリスト。 } リスト <整数>データ= 新規のArrayList <整数> (); data.add( 1 )。 list.add(データ)。 もし(numRowsの数が1 == ){ 戻りリスト。 } 他{ のgetRow(リスト、データ、 2、numRowsの数)。 戻り値のリスト。 } } 公共 ボイドのgetRow(一覧<一覧<整数>>リスト、リスト<整数>データ、INT番号、INT tacket){ 場合(数> tacket){ リターン。 } リスト <整数> NEWDATA = 新規のArrayList <整数> (); 以下のために(INT ; I <数; iが0 = Iは++ ){ 場合(I == 0 || I ==数-1 ){ newdata.add( 1 )。 } 他{ int型 TEMP = data.get(I-1)+ data.get(I)。 newdata.add(TEMP)。 } } list.add(NEWDATA)。 getRow(リスト、NEWDATA、数 +1 、tacket)。 } }