动态规划之119杨辉三角 II

题目:给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

题目链接:119. 杨辉三角 II - 力扣(LeetCode)

示例:


解法: 

杨辉三角,是二项式系数在三角形中的一种几何排列。它是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。

杨辉三角的几个特性:

(1)每一行首尾均为1。每行数字左右对称,由 1 开始逐渐变大再变小,并最终回到 1。

(2)第 n 行(从 0 开始编号)的数字有 n+1 项,前 n 行共有 \frac{n(n+1))}{2}个数。

  (3)第 n 行的第 m 个数(从 0 开始编号)表示组合数 C(n,m),记作 C_{n}^{m}。即为从 n 个不同元素中取 m 个元素的组合数。可以用公式来表示它:C_{n}^{m}=\frac{n!}{m!\times (n-m)!}

(4)每个数字等于上一行的左右两个数字之和,可用此性质写出整个杨辉三角。即第 n 行的第 i 个数等于第 n−1 行的第 i−1 个数和第 i 个数之和。这也是组合数的性质之一,即 C_{n}^{i}=C_{n-1}^{i-1}+C_{n-1}^{i}

(5)\left ( a+b \right )^{n}的展开式(二项式展开)中的各项系数依次对应杨辉三角的第 n 行中的每一项。

二维数组法: 

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<vector<int>> dp(rowIndex+1);
 
        for(int i=0;i<=rowIndex;i++)
        {
            dp[i].resize(i + 1);//第i行的元素个数重新分为i+1个
            //第0行1个元素,第1行2个元素....
            dp[i][0]=1;
            dp[i][i]=1;
            for(int j=1;j<i;j++)
            {
                dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
            }
        }
        return dp[rowIndex];
    }
};

 一维数组法:

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int> dp(rowIndex+1);
        dp[0]=1;
 
        //我们可以倒着计算当前行,这样计算到第 i 项时,i−1 项仍然是上一行的值。
        for (int i = 1; i <= rowIndex; i++) 
        {
            for (int j = i; j > 0; j--) 
            {
                dp[j] += dp[j - 1];
            }
        }
        return dp;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值