Pascal's Triangle

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]
]

思路:杨辉三角形,解决这道题就是要知道什么是杨辉三角形。

  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}。可用此性质写出整个杨辉三角形。
class Solution {
public:
    vector<vector<int> > generate(int numRows) {
        vector<vector<int> > result;
        result.resize(numRows); //创建空间
        for(int i=0;i<numRows;i++)
        {
            for(int j=0;j<=i;j++)
            {
                result[i].push_back(1);//首先将这些全部赋值为1
            }
        }
        for(int i=0;i<numRows;i++)
        {
            for(int j=1;j<=i-1;j++)//从第三行开始,进行,你懂的
            {
                result[i][j]=result[i-1][j-1]+result[i-1][j];
            }
        }
        return result;
    }
};

 

posted @ 2014-03-15 23:15  Awy  阅读(142)  评论(0编辑  收藏  举报