运用动态规划法,除了每一行的第一个和最后一个,其余都满足dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
int[][] arg = new int[numRows+1][numRows+1];
arg[0][0]=1;
arg[1][0]=1;
arg[1][1]=1;
for(int i=2;i<numRows;i++){
for(int j=1;j<numRows-1;j++){
arg[i][0]=1;
arg[i][i]=1;
arg[i][j]=arg[i-1][j-1]+arg[i-1][j];
}
}
for(int i=0;i<numRows;i++){
List<Integer> p=new ArrayList<>();
for (int j=0;j<=i;j++){
p.add(arg[i][j]);
}
result.add(p);
}
return result;
}
}
我是先用数组算出来,再转换成list的格式,但是其实也可以直接用list形式写,每算出一行就保存在list当中。大家可以自己试试。