题目大意:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
思路:
- 第一步,根据给定的numRows,初始化相应的二维数组
- 第二部,根据杨辉三角的规则,填充相应的数,对内层的每个列表来说,res[i][j] 的元素等于 res[i-1][j-1] 的值加上 res[i-1][j] 的值。
class Solution(object):
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
res=[]
for i in range(numRows):#每循环一次出现一行
temp=[1]*(i+1)#初始化为1
res.append(temp)
for j in range(1,i):#列
res[i][j]=res[i-1][j-1]+res[i-1][j]
return res
以下是Java版本:
1. public static List<List<Integer>> generate(int numRows){
2. List<List<Integer>> s = new ArrayList<List<Integer>>();
3. if(numRows == 0) return s;
4. ArrayList<Integer> a = new ArrayList<Integer>();
5. a.add(1);
6. s.add(a); //注意二维的赋值问题 不能直接添加1
7. for(int i = 1; i < numRows; i++){
8. List<Integer> t = new ArrayList<Integer>();
9. t.add(1);
10. for(int j = 1; j <= i - 1 ; j++){
11. t.add(s.get(i - 1).get(j - 1) + s.get(i - 1).get(j));
12. }
13. t.add(1);
14. s.add(t);
15. }
16. return s;
17. }
Test:
1. public static void main(String[] args){
2.
3. System.out.println(generate(5));
4. }