119 - 杨辉三角II(pascals-triangle-ii)

Create by jsliang on 2019-6-28 07:39:47
Recently revised in 2019-6-28 08:27:00

一 目录

不折腾的前端,和咸鱼有什么区别

目录
一 目录
二 前言
三 解题
3.1 解法 - 常规解法
3.2 解法 - 数学解法

二 前言

返回目录

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。

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

示例:

输入: 3
输出: [1,3,3,1]
进阶:

你可以优化你的算法到 O(k) 空间复杂度吗?

补充:杨辉三角类似于:

[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

三 解题

返回目录

小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。

3.1 解法 - 常规解法

返回目录

  • 解题代码
var getRow = function(rowIndex) {
  if (!rowIndex) {
    return [1];
  }
  if (rowIndex === 1) {
    return [1, 1];
  }
  let recursion = getRow(rowIndex - 1);
  let result = [];
  for (let i = 0; i < rowIndex; i++) {
    if (recursion[i] && recursion[i + 1]) {
      result.push(recursion[i] + recursion[i + 1]);
    }
  }
  return [1, ...result, 1];
};
  • 执行测试

  • rowIndex5

  • return
[ 1, 5, 10, 10, 5, 1 ]
  • LeetCode Submit
√ Accepted
  √ 34/34 cases passed (80 ms)
  √ Your runtime beats 83.43 % of javascript submissions
  √ Your memory usage beats 7.19 % of javascript submissions (35.1 MB)
  • 知识点

push()push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。push() 详细介绍

  • 解题思路

首先,今天一大早起来看到这道题,瞪,第一感觉是我昨天是不是做了什么了不得的事儿……

昨天的题也是杨辉三角(题 118),传递一个参数 n,获取它的 n 行记录,即:

if (n === 4) {
  return [
    [1],
    [1, 1],
    [1, 2, 1],
    [1, 3, 3, 1],
  ]
}

然后,昨天我的做法就是:统计每行的返回结果,最终汇总到一块。

所以……

我昨天就破解了两道题了啊-_-||

最后,还是扯下思路吧:

  • 如果 rowIndex0,返回 [1]
  • 如果 rowIndex1,返回 [1, 1]
  • 递归 getRow(rowIndex - 1),然后求出中间的和,并 return 出来 [1, ...result, 1]

细节小伙伴们可以打印看看是怎么一回事,在此就不多累述了。

3.2 解法 - 数学解法

返回目录

  • 解题代码
var getRow = function(rowIndex) {
  let a = 1;
  let arr = [];
  for (let i = 0; i <= rowIndex; i++) {
    arr.push(a);
    a = (a * (rowIndex - i)) / (i + 1);
  }
  return arr;
};
  • 执行测试

  • 5

  • return
[ 1, 5, 10, 10, 5, 1 ]
  • LeetCode Submit
√ Accepted
  √ 34/34 cases passed (72 ms)
  √ Your runtime beats 94.57 % of javascript submissions
  √ Your memory usage beats 62.09 % of javascript submissions (33.7 MB)
  • 知识点

push()push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。push() 详细介绍

  • 解题思路

惯例看下 LeetCode 解题库:

大佬受我一拜!

初瞄,感觉是数学解法,卧槽,数学大佬,是不是小学获得过奥林匹克数学竞赛奖的~

我不管,我没看懂,我不解释,等小伙伴们给我留言评论,说出这种解法思路的第一个小伙伴,获取赏金 6.66!


不折腾的前端,和咸鱼有什么区别!

图

jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。

扫描上方二维码,关注 jsliang 的公众号,让我们一起折腾!

知识共享许可协议
jsliang 的文档库梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。

Copyright © jsliang.top 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-06-28 10:15:11

results matching ""

    No results matching ""