118:パスカルの三角形パスカルの三角形
非負の整数を考えるとnumRowsの数、最初の発生numRowsの数パスカルの三角形のを。
非負の整数を考えるとnumRowsの数、のパスカルの三角形前に生成numRowsの数のライン。
パスカルの三角形において、各数値は、直接上記2つの数の合計です。
パスカルの三角形では、各番号は、その左上と右上の数です。
例:
Input: 5
Output:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
問題解決のアイデア:
図1は、第1行、第2行、最初と最後の行のそれぞれは、xは他のインデックス位置座標(M、N)の数は、xはインデックス番号が正の数であると仮定され、1であり、それは上記でありますちょうど左の上のインデックスの数。すなわち、(M-1、N)、(M-1、N-1)と数2。
Javaの:
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> triangle = new ArrayList<List<Integer>>();
if(numRows == 0) return triangle;
List<Integer> one = new ArrayList<Integer>();
one.add(1);
triangle.add(one);
if(numRows == 1) return triangle;
for (int i=1;i<numRows;i++){
List<Integer> row = new ArrayList<Integer>();
row.add(1);
for (int j=1;j<i;j++){
List<Integer> prev = triangle.get(i-1);
row.add(prev.get(j-1)+prev.get(j));
}
row.add(1);
triangle.add(row);
}
return triangle;
}
}
パイソン:
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
if numRows==0:return []
triangle=[[1]]
if numRows==1: return triangle
for i in range(1,numRows):
tmp=[1]
for j in range(1,i):
tmp.append(triangle[i-1][j-1]+triangle[i-1][j])
tmp.append(1)
triangle.append(tmp)
return triangle
要約:
非常に簡単な質問には、Java、ネストされた配列を確認することができます。さらに添加することができる内部ループが決定されif(i!=0) row.add(1);triangle.add(row);
、私は、これが省略されてもよい場合は0プラス1に等しくありません
List<Integer> one = new ArrayList<Integer>();
one.add(1);
triangle.add(one);
if(numRows == 1) return triangle;
コードセグメントが、これはif(i!=0)
最初のサイクルに入った後たびに決定されるであろう。リソースの消費を減らすの原則に沿って、それが外に言及しなければなりません。