题目:又叫“杨辉三角形”
Given a non-negative integer numRows, generate the first numRows of Pascal's triangle.
In Pascal's triangle, each number is the sum of the two numbers directly above it.
思路:用动态规划。首先,第0行的数字为1;其次,每行的第一个和最后一个为1;最后,其他的值为他的上一行左边+上一行右边(与其接壤)的值。
具体做法:将三角形看做一个大列表,每行作为一个行列表存储在大列表中。
1 class Solution { 2 public List<List<Integer>> generate(int numRows) { 3 List<List<Integer>> triangle = new ArrayList<List<Integer>>();//存储整个三角形,其中每行也是一个整型列表。 4 if(numRows == 0){//当要求0行,则输出空的列表; 5 return triangle; 6 } 7 triangle.add(new ArrayList<>());//第一行永为1 8 triangle.get(0).add(1); 9 for(int numRow = 1; numRow < numRows; numRow ++){ 10 List<Integer> row = new ArrayList<>(); 11 List<Integer> prevrow = triangle.get(numRow-1); 12 row.add(1);//每行第一个=1 13 for(int j =1; j < numRow ; j++){ 14 row.add(prevrow.get(j-1)+prevrow.get(j));//中间的元素等于上一行左右两个的和; 15 } 16 row.add(1);//每行最后一个=1; 17 triangle.add(row); 18 } 19 return triangle; 20 } 21 }