杨辉三角

一、什么是杨辉三角

杨辉三角:是二项式系数在三角形中的一种几何排列。
杨辉三角的每个数等于它上方两数之和。
在这里插入图片描述

二、求杨辉三角第n行

杨辉三角第n行第m个数的值为组合数 C n − 1 m − 1 C_{n-1}^{m-1} Cn1m1 的结果

  1. 代码

    leetcode 119题 杨辉三角Ⅱ

    /**
     * @param {number} rowIndex
     * @return {number[]}
     */
    var getRow = function(rowIndex) {
        /**
         * 数学法
         * 杨辉三角第n行第m项 = C(n-1, m-1)的组合数
         * 时间复杂度:O(n)
         * 空间复杂度:O(n) 存储结果
         */
        // 预处理(无)
    
        // 组合数计算函数
        function c(_base, _select){
            /**
             * 组合数计算
             * @param { number } _base: 选择基
             * @parem { number } _select: 选择数
             * @return { number }: 计算 _base 选 _select的组合数
             */
            if(_select === 0) return 1;
            return Array.from({length: _select}, (v, i) => _base - i).reduce((pre, curr) => pre * curr) / Array.from({length: _select}, (v, i) => i + 1).reduce((pre, curr) => pre * curr);
        }
        
        // 计算第rowIndex+1行的结果
        let result = [];
        // 计算一半结果(杨辉三角每一行延中轴对称)
        let halfLen = Math.ceil((rowIndex+1) / 2);
        for(let i=1; i<=halfLen; i++){
            result.push(c(rowIndex, i-1));
        }
        // 对称复制一半结果
        for(let i=0; i<halfLen; i++){
            result.push(result[halfLen-1-i]);
        }
        // 当前行有奇数个结果,剔除一个
        ((rowIndex+1) % 2 === 1) && result.splice(halfLen, 1);
        return result;
    };
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值