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

栏目: IT技术 · 发布时间: 5年前

内容简介:LeetCode - 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 解法 - 数学解法 |

二 前言

  • 难度:简单

  • 涉及知识:数组

  • 题目地址:https://leetcode-cn.com/problems/pascals-triangle-ii/

  • 题目内容

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

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

  3. 示例:

  4. 输入: 3

  5. 输出: [1,3,3,1]

  6. 进阶:

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

补充:杨辉三角类似于:

  1. [

  2. [1],

  3. [1,1],

  4. [1,2,1],

  5. [1,3,3,1],

  6. [1,4,6,4,1]

  7. ]

三 解题

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

3.1 解法 - 常规解法

  • 解题代码

  1. var getRow = function(rowIndex) {

  2. if (!rowIndex) {

  3. return [1];

  4. }

  5. if (rowIndex === 1) {

  6. return [1, 1];

  7. }

  8. let recursion = getRow(rowIndex - 1);

  9. let result = [];

  10. for (let i = 0; i < rowIndex; i++) {

  11. if (recursion[i] && recursion[i + 1]) {

  12. result.push(recursion[i] + recursion[i + 1]);

  13. }

  14. }

  15. return [1, ...result, 1];

  16. };

  • 执行测试

  1. rowIndex: 5

  2. return

  1. [ 1, 5, 10, 10, 5, 1 ]

  • LeetCode Submit

  1. Accepted

  2. 34/34 cases passed (80 ms)

  3. Your runtime beats 83.43 % of javascript submissions

  4. Your memory usage beats 7.19 % of javascript submissions (35.1 MB)

  • 知识点

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

  • 解题思路

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

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

  1. if (n === 4) {

  2. return [

  3. [1],

  4. [1, 1],

  5. [1, 2, 1],

  6. [1, 3, 3, 1],

  7. ]

  8. }

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

所以……

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

最后,还是扯下思路吧:

  • 如果 rowIndex 为 0,返回 [1]

  • 如果 rowIndex 为 1,返回 [1,1]

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

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

3.2 解法 - 数学解法

  • 解题代码

  1. var getRow = function(rowIndex) {

  2. let a = 1;

  3. let arr = [];

  4. for (let i = 0; i <= rowIndex; i++) {

  5. arr.push(a);

  6. a = (a * (rowIndex - i)) / (i + 1);

  7. }

  8. return arr;

  9. };

  • 执行测试

  1. 5

  2. return

  1. [ 1, 5, 10, 10, 5, 1 ]

  • LeetCode Submit

  1. Accepted

  2. 34/34 cases passed (72 ms)

  3. Your runtime beats 94.57 % of javascript submissions

  4. Your memory usage beats 62.09 % of javascript submissions (33.7 MB)

  • 知识点

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

  • 解题思路

惯例看下 LeetCode 解题库:

大佬受我一拜!

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

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


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

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

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

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

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


以上所述就是小编给大家介绍的《LeetCode - 119 - 杨辉三角II(pascals-triangle-ii)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

从算法到程序

从算法到程序

徐子珊 / 2013-3 / 59.00元

《从算法到程序:从应用问题编程实践全面体验算法理论》第1章讨论算法设计、分析的基本概念,第2章讨论算法设计中最常用的几个数据结构,包括链表、栈、队列、二叉搜索数、散列表等。第3章讨论了算法设计的两个基本策略:渐增策略与分支策略。这3章的内容,为读者阅读本书以后的内容奠定了基础。第4章讨论了几个代数计算的基本问题及其算法,包括矩阵运算、解线性方程组、多项式运算等。第5章讨论了几个关于计算几何的基本问......一起来看看 《从算法到程序》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具