118タイトル:パスカルの三角形

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)。
    } 
}

 

おすすめ

転載: www.cnblogs.com/xiaobaidashu/p/11881590.html
おすすめ