当前位置: 首页 > article >正文

杨辉三角 II(js实现,LeetCode:119)

 这题是杨辉三角的进阶版题目,所以直接在返回值那里返回整个三角的rowIndex行的数组就可以做出来

/**
 * @param {number} rowIndex
 * @return {number[]}
 */
var getRow = function(rowIndex) {
    let arr = [[1], [1, 1]]
    for (let i = 1; i <= rowIndex - 1; i++) {
        let single_arr = []
        for (let j = 0; j <= i + 1; j++) {
            if (j == 0 || j == i + 1) {
                single_arr.push(1)
            } else {
                single_arr.push(arr[i][j - 1] + arr[i][j])
            }
            console.log(single_arr)
        }
        arr.push(single_arr)
    }
    return arr[rowIndex]
};

 时间和空间复杂度都为O(N²),这也太吓人了,要是返回第200行所需要的时间与空间有点太多了,这里思考一下如何优化,使用滚动数组的思想优化空间复杂度,上一篇文章提到说第rowIndex行就刚好有rowIndex个元素,

var getRow = function(rowIndex) {
    let pre = [], cur = [];
    for (let i = 0; i <= rowIndex; ++i) {
        cur = new Array(i + 1).fill(0);
        cur[0] = cur[i] =1;
        for (let j = 1; j < i; ++j) {
            cur[j] = pre[j - 1] + pre[j];
        }
        pre = cur;
    }
    return pre;
};

这里还是用了2个数组来实现,再优化一下,只使用一个数组

var getRow = function(rowIndex) {
    const row = new Array(rowIndex + 1).fill(0);
    row[0] = 1;
    for (let i = 1; i <= rowIndex; ++i) {
        for (let j = i; j > 0; --j) {
            row[j] += row[j - 1];
        }
    }
    return row;
};

这样优化之后空间复杂度变成了O(N)


http://www.kler.cn/a/598188.html

相关文章:

  • OSPF多区域通信
  • Js闭包Closure 及 其可能产生的内存泄漏问题
  • C++常见问题与思考
  • js去除后端返回json的冗余字段
  • C语言-状态模式详解与实践 - OTA升级状态机
  • WebSocket:现代实时通信协议的深度解析与实践
  • flask不会随着网页的刷新和关闭停止任务
  • 从失衡到平衡:手撕 AVL 树的插入旋转操作
  • 嵌入式学习(31)-Lora模块A39C-T400A30D1a
  • Transformer中,Fisher矩阵与权重之间关系
  • 开源AI大模型、AI智能名片与S2B2C商城小程序源码:实体店引流的破局之道
  • 新闻发布时间抽取(二)
  • 微调这件小事:训练集中的输入数据该作为instruction还是input?从LLaMA-Factory的源码中寻找答案吧~
  • CSS3学习教程,从入门到精通,CSS3 布局语法知识点及案例代码(15)
  • HTML5 SVG 学习笔记
  • LeetCode 92 Reverse Linked List Ⅱ 反转链表Ⅱ
  • 中间件漏洞-WebLogic篇
  • llama源码学习·model.py[6]TransformerBlock类
  • uni-app 与webView 互相传值
  • 内网渗透技术 Docker逃逸技术(提权)研究 CSMSF