您的位置 首页 java

LeetCode基础算法题第143篇:杨辉三角II

LeetCode基础算法题第143篇:杨辉三角II

LeetCode 119. 杨辉三角II( Pascal ‘s Triangle II)

问题描述:

给定一个非负整数k,k小于等于33,返回杨辉三角中下标为k的行的内容。

注:

空间复杂度要求为O(k)。

示例:

LeetCode基础算法题第143篇:杨辉三角II

C语言实现:

关于杨辉三角,我们在 中遇到过,其实两道题大同小异。

关于实现,我们今天换一种,我们用递归方法来实现。

题目中k作为杨辉三角的下标,起始值是0,为了方便描述,我定义一个变量n = k+1,那么n就表示为杨辉三角的第n层。

我们回顾一下,n+1层的推导如下:

LeetCode基础算法题第143篇:杨辉三角II

第n+1层值的是从最顶层一层一层用这样相同的方法推导过来的,所以很适合用递归。

由于题目限定,空间复杂度要满足O(k),所以我们不方便在 递归函数 中申请空间。我们的做法是在getRow函数中就分配好,然后传递给递归函数直接使用。

由于杨辉三角的特性,第n层的数组长度就是n,即k+1,所以我们可以一次性就分配好。

我们还需要确保分配的数组必须全部用0填充。因为在递归的过程中要不断的错位相加,所以要避免未正确初始化导致的数组值异常。

详细代码如下:

LeetCode基础算法题第143篇:杨辉三角II

LeetCode基础算法题第143篇:杨辉三角II

Java语言实现:

Java 的实现和C语言的实现一致。

递归函数不建议用ArraysList来实现,因为ArraysList内部是对数组封装,没有直接对int[]操作效率高。实际测试结果也是这样ArraysList要慢一些。

另外关于int[]转换成List的方法,不要用java8的Arrays.stream特性,这个方法很慢。直接遍历int[]是比较快的。

代码如下:

LeetCode基础算法题第143篇:杨辉三角II

LeetCode基础算法题第143篇:杨辉三角II

Python语言实现:

Python实现,我们用zip加列表生成器实现,这和 python的实现是类似的。

代码如下:

LeetCode基础算法题第143篇:杨辉三角II

LeetCode基础算法题第143篇:杨辉三角II


谢谢大家一直以来的关注和支持!

我一直在努力的写好每一篇文章,画好每一份插图。但是作为一个996从业人员,时间精力十分有限。所以针对评论部分,以后 只回答粉丝的问题和私信 。希望仅仅是路过的朋友能够体谅, 希望更多人关注《 》, 谢谢!


文章来源:智云一二三科技

文章标题:LeetCode基础算法题第143篇:杨辉三角II

文章地址:https://www.zhihuclub.com/186111.shtml

关于作者: 智云科技

热门文章

网站地图