パスカルの三角形では、各行の値は、前の行の値の合計です。 使用可能な値がない場合は、値が使用されます。 n [k] = n-1 [k-1] + n-1 [k]のJava表記法を用いる。 最初の行には値1が含まれます。
パスカルの三角形は、2 forループを使用して最初の要素で先頭から始まります。
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class InterviewPascalTriangle {
protected List<List<Integer>> generatePascalTriangle(int nbRows){
// 入力検証
if ( nbRows < 0 )
throw new IllegalArgumentException( "行数は負数にすることはできません。" );
// 返すオブジェクト
List<List<Integer>> toReturn = new LinkedList<List<Integer>>();
// 前の行を保存します。
List<Integer> previousRow = Collections.emptyList();
// すべての行を処理する
for( int i = 0 ; i <= nbRows ; i++ ){
// 現在の行を作成する
List<Integer> currentRow = new LinkedList<Integer>();
toReturn.add( currentRow );
// 以前の値を定義する
int previousValue = 0;
// すべての値をループする
for(int c : previousRow){
currentRow.add( c + previousValue );
// 現在の値を前の値に設定する
previousValue = c;
}
// 最後の値を追加する
currentRow.add( 1 );
// 現在の行を保存します。
previousRow = currentRow;
}
return toReturn;
}
public static void main(String[] argv) throws Exception {
InterviewPascalTriangle t = new InterviewPascalTriangle();
List<List<Integer>> res = t.generatePascalTriangle(7);
System.out.println( "結果:" );
String tmp = res.get( res.size() -1 ).toString();
int max = (int) tmp.length();
for(List<Integer> c : res ){
String toDisplay = c.toString();
int padding = ( max - toDisplay.length()) / 2 ;
StringBuilder sb = new StringBuilder();
for(int i=0; i < padding; i++){
sb.append( " " );
}
sb.append( toDisplay );
System.out.println( sb.toString() );
}
}
}
結果:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
パスカルの三角形の行には、0からnの番号が付けられます。 最初の行には値1のみが含まれます。