杨辉三角:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
如 输入5:
1
11
121
1331
14641
…
解题想法:
该题整体用到List接口。
首先第一行和第二行特殊处理直接插入1即可。
从第三行开始我们可以发现规律第n行有n列,从第n行的第2个位置到倒数第二个位置我们设置成i,该值是第n减一行的i-1位置的值,加上i位置的值。
最后我们在第n > 2行的头和尾都直接插入1即可。
然后插入链表。
代码如下:
/**
* 杨辉三角
*/
import java.util.ArrayList;
import java.util.List;
public class Generate {
public static List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
if(numRows <= 0) {
return result;
}
List<Integer> firstLin = new ArrayList<>();
firstLin.add(1);
result.add(firstLin);
if(numRows == 1) {
return result;
}
List<Integer> secondLin = new ArrayList<>();
secondLin.add(1);
secondLin.add(1);
result.add(secondLin);
if(numRows == 2) {
return result;
}
for(int row = 3; row <= numRows; row ++) {
List<Integer> lin = new ArrayList<>();
lin.add(1);
for(int col = 1; col < row - 1; col ++) {
List<Integer> prevLin = result.get(row - 1 - 1);
lin.add(prevLin.get(col - 1) + prevLin.get(col));
}
lin.add(1);
result.add(lin);
}
return result;
}
public static void main(String[] args) {
List<List<Integer>> result = generate(5);
System.out.println(result);
}
}