leetcode 杨辉三角II

119.杨辉三角II

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例 1:
输入: rowIndex = 3
输出: [1,3,3,1]

示例 2:
输入: rowIndex = 0
输出: [1]

示例 3:
输入: rowIndex = 1
输出: [1,1]

提示:
0 <= rowIndex <= 33

进阶:
你可以优化你的算法到 O(rowIndex) 空间复杂度吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle-ii。

杨辉三角性质

  • 根据性质3求解
    利用性质3公式我们得到同一行的相邻组合数的关系在这里插入图片描述
    并且每一行第一个元素都为0,所以可以直接计算出第 n 行的所有组合数。
    N过大result[i - 1] * (rowIndex - i + 1)算出来的值int存不下,计算时转为long long.
vector<int> getRow(int rowIndex) {
        vector<int> result(rowIndex + 1);
        result[0] = 1;
        for (int i = 1; i <= rowIndex; ++i) {
            result[i] = 1LL * result[i - 1] * (rowIndex - i + 1) / i;
        }
        return result;
    }
  • 根据性质4 求解
    每个数字等于上一行的左右两个数字之和,可用此性质写出整个杨辉三角。在本题中只需要第n行的值即可,而第n的第i个值等于第n-1行的第i-1的值加上i的值。所以只需要存储两行的值;而如果通过倒着计算第n的值,那么当前位置前面的仍然是上一行的值,可以进一步的减少存储空间。
vector<int> getRow(int rowIndex) {
        vector<int> result(rowIndex + 1);
        result[0] = 1;
        for (int i = 1; i <= rowIndex; ++i) {
           for (int j = i; j > 0; --j) {
               result[j] += result[j-1];
           }
        }
        return result;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值