题目描述:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行
思路:
1、杨辉三角的特点:
(1)第一行是1;
(2)第二行是1,1;
(3)第 i 行的首尾全都是1;
(4)第 i 行有 i 个元素;
(5)第 i 行的第 j 列等于第(i-1)行的(j-1)列加上第(i-1)行的 j 列
2、解题思路:
(1)若只有一行,直接输出第一行;
(2)若有两行,直接输出前两行;
(3)若有 n 行:
a.(i,j) = (i-1,j-1)+(i-1,j);
b.每一行的首尾都是1;
代码:
import java.util.ArrayList;
import java.util.List;
public class YangHui {
public List<List<Integer>> generate(int numRows){
if(numRows<1){
return new ArrayList<>();
}
List<List<Integer>> result = new ArrayList<>();
//第一行
List<Integer> first = new ArrayList<>();
first.add(1);
result.add(first);
if(numRows == 1){
return result;
}
//第二行
List<Integer> second = new ArrayList<>();
second.add(1);
second.add(1);
result.add(second);
if(numRows == 2){
return result;
}
//第n行
for(int row=3;row<=numRows;row++){
//第row行元素的前一行
List<Integer> prev = result.get(row-1-1);
//当前行
List<Integer> cur = new ArrayList<>();
//第row行第一一个元素是1
cur.add(1);
for(int col =2;col<row;col++){
//第row行col列元素的值
int curNum = prev.get(col-1-1)+prev.get(col-1);
//放到col行中去
cur.add(curNum);
}
//第row行最后一个元素是1
cur.add(1);
result.add(cur);
}
return result;
}
}