leetcode之pascals-triangle-ii(杨辉三角)

leetcode之pascals-triangle-ii(杨辉三角)

题目

Given an index k, return the k th row of the Pascal’s triangle.

For example, given k = 3,
Return[1,3,3,1].

Note:
Could you optimize your algorithm to use only O(k) extra space?

题意

给定一个index k,要求返回第k行的杨辉三角对应的行的数组。
例如index=3,则返回数组[1,3,3,1]。

解题思路

杨辉三角的显著特征就是下一层index为i的值对应是上一层的index为i和i-1的值之和;
所以有dp2[i] =dp1[i]+dp1[i-1];
但是这里其实dp2是dp1的下一层,这里有一个简单的存储算法:
其实dp2的对应的数组长度 = dp1+1。这里可以采用典型的滚动计算法,先计算上一层,然后到一下层时,
直接还是使用原来的dp数组进行存储,对应的值直接改变为dp[i] = dp[i]+dp[i-1] ,既可,因为这里等式的左边代表新一层的dp数组,而等式的右边代表上一层已经计算好的数组
在这里插入图片描述

C++实现代码

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<int> dp(rowIndex+1,1);
        dp[0]=1;
        for(int i=2;i<rowIndex+1;i++){ //从第二行开始求
            for(int j=i-1;j>0;j--){
                dp[j] = dp[j]+dp[j-1]; //这里是滚动计算,每一次int i的递增,都是代表着对应层的dp被计算出来,然后又到下一层,再次被dp[i]=dp[i+dp[i-1]给刷新,变成下一层的杨辉三角的那一层的数组
            }
        }
        return dp;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值