leetcode算法119. 杨辉三角 II

87 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

一、题目描述:

119. 杨辉三角 II - 力扣(LeetCode) (leetcode-cn.com)   给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex **行。

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

1626927345-DZmfxB-PascalTriangleAnimated2.gif

示例 1:

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

示例 2:

输入: rowIndex = 0
输出: [1]

示例 3:

输入: rowIndex = 1
输出: [1,1]

提示:

  • 0 <= rowIndex <= 33

二、思路分析:

启发来自动态规划题目,求最短三角路径,自底向上处理。本题是采用自顶向下处理 首先分配一个数组,长度为n,为最后一行元素的长度。
每当处理一个元素,可以看到,总是上一层的i和i-1元素相加得到下一层i处的值。然后依次向右移动。
用一个数组完成这样的工作,每次[i] = [i]+[i-1] 都会覆盖[i],所以每次都要保存上一层的[i],用last存储
接着向右移动,last存储的值就会作为本次的[i-1]被保留下来,与[i]相加,得到下一层[i]的值,重复2-4

三、AC 代码:

var getRow = function(rowIndex) {
  let n = rowIndex+1;
  if (n == 1) return [1];
  if (n == 2) return [1, 1]
  let arr = Array.from({length: n});
  arr[0] = 1; arr[1] = 1;
  let last = 1;
  for (let i = 2; i < n; i++) {
    let j = 1;
    for (;j < i; j++) {
      let temp = arr[j];
      arr[j] = last + arr[j];
      last = temp;
    }
    arr[j] = 1;
  }
  return arr;
};

范文参考:

滚动数组的动画图解,优化空间复杂度 - 杨辉三角 II - 力扣(LeetCode)

【LetMeFly】119.杨辉三角 II:基于原地滚动的空间优化 - 杨辉三角 II - 力扣(LeetCode)

「手画图解」多解法:动态规划、递归、记忆化递归 |119.杨辉三角II - 杨辉三角 II - 力扣(LeetCode)