Pascal's Triangle leetcode java(杨辉三角)

题目

Given numRows, generate the first numRows of Pascal's triangle.

For example, given numRows = 5,
Return

[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

题解

既然讲到了Pascal‘s Triangle,即杨辉三角。那么就先去Wikipedia上面复习一下杨辉三角吧:
杨辉三角形,又称賈憲三角形帕斯卡三角形海亚姆三角形,是二项式係數在的一种写法,形似三角形
杨辉三角形第n层(顶层称第0层,第1行,第n层即第n+1行,此处n为包含0在内的自然数)正好对应于二项式展开的系数。例如第二层1 2 1是幂指数为2的二项式展开形式的系数。
杨辉三角的性质:
  1. 楊輝三角以正整數構成,數字左右对称,每行由1开始逐渐变大,然后变小,回到1。
  2. n行的数字个数为n个。
  3. n行的第k個數字為組合數C_{n-1}^{k-1}
  4. n行数字和为2^{n-1}
  5. 除每行最左側與最右側的數字以外,每个数字等于它的左上方與右上方两个数字之和(也就是說,第n行第k個數字等於第n-1行的第k-1個數字與第k個數字的和)。這是因为有組合恒等式:C_{n}^{i}=C_{n-1}^{i-1}+C_{n-1}^{i}。可用此性质写出整个楊輝三角形。



根据上面那个图,我们可以发现,第一行和第二行都由1组成。其他行的起始和结束都是1.内容由上一行相邻两个数组和组成。由此我们可以写出代码。
代码如下:
 1  public  class Solution {
 2      public  static List<List<Integer>> generate( int numRows) {
 3         List<List<Integer>> res =  new ArrayList<List<Integer>>();
 4         
 5          if(numRows == 0)
 6              return res;
 7         
 8         for( int j = 0;j<numRows;j++){
 9            List<Integer> row =  new ArrayList<Integer>();
10            row.add(1);
11          for( int i=1;i<j;i++){ // 除去第一行和第二行才进这个循环
12              List<Integer> prevRow = res.get(j-1); // 当前行的上一行
13               int temp = prevRow.get(i-1)+prevRow.get(i);
14             row.add(temp);
15         }
16          if(j!=0) // 除了第一行,末尾接个1
17              row.add(1);
18         res.add(row);
19        }
20         return res;
21     }

转载于:https://www.cnblogs.com/springfor/p/3887910.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值