龙空技术网

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

吾是我师 531

前言:

此刻姐妹们对“如何用c语言编写杨辉三角”大概比较看重,各位老铁们都想要知道一些“如何用c语言编写杨辉三角”的相关文章。那么小编在网上汇集了一些对于“如何用c语言编写杨辉三角””的相关资讯,希望姐妹们能喜欢,同学们一起来了解一下吧!

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和> 精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式> 聊到大数据框架,从大数据聊到人工智能,... ...。

如果有任何问题可以在文章后评论或者私信给我。

持续分享,敬请关注。

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

问题描述:

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

注:

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

示例:C语言实现:

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

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

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

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

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

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

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

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

详细代码如下:

Java语言实现:

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

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

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

代码如下:

Python语言实现:

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

代码如下:

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

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

标签: #如何用c语言编写杨辉三角