LeetCode # Array # Easy #118. Pascal's Triangle

题目:又叫“杨辉三角形” 

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 }

猜你喜欢

转载自www.cnblogs.com/DongPingAn/p/8987837.html