LeetCode算法第118. Pascal's Triangle
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和> 精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式> 聊到大数据框架,从大数据聊到人工智能,... ...。
如果有任何问题可以在文章后评论或者私信给我。
我会持续分享下去,敬请您的关注。
LeetCode 118. 杨辉三角(Pascal's Triangle)
问题描述:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
C语言实现:
杨辉三角其实并不是杨辉发现的,最早是北宋数学家贾宪发现的。
如果贾宪要是知道自己发现的东西没拿自己的名字命名,会不会也像牛顿一样和莱布尼茨争命名权?
回归正题。杨辉三角的构建方式,题目中已经描述的很清楚。除此之外,它有至少如下的两个特点:
- 每一行的第一个和最后一个元素总是1;
- 第n行有n个元素;
更直观一点,可用下图表示:
因此我们可以写出如下的代码:
Java语言实现:
Java 的实现和C语言的实现基本一致。
由于用的是List不是数组,所以每行首尾的元素的赋值和C的实现有所不同。
再有就是,当numRows大于0的时候,在循环之前,我先创建了第一行,即[1],然后从i=1开始遍历;这样做是为了避免循环中每次if判断。
具体代码如下:
Python语言实现:
Python 的实现和Java语言的实现基本一致。
只是在创建每一行的元素时,我们可以直接用zip或者map来实现,通过我的测试,两种方式性能差不多。
具体代码如下:
题外话。如果从贾宪算起,杨辉三角要比欧洲早提出差不多600年。古代的中国科技还是相当可以的。到了近代,百年屈辱,国运急转直下,三次工业革命中国都没赶上,导致科技严重滞后,经过一代中国人奋发图强,才有今天的中国。美国等西方国家对中国技术的封锁,已经相当的不要脸。验证了习主席的那句话,"核心技术买不来,换不了"。必须要技术自强。或许,此次西方对中国的技术封锁是中国芯片设计制造和操作系统研发的一次机遇。中国人历来都是在逆境中越战越勇。希望明天凭借着中国人的勤劳和智慧,中国的软件芯片能处于世界第一梯队。好运中国!加油中国!
谢谢大家一直以来的关注和支持!
我一直在努力的写好每一篇文章,画好每一份插图。但是作为一个996从业人员,时间精力十分有限。所以针对评论部分,以后只回答粉丝的问题和私信。希望仅仅是路过的朋友能够体谅,希望更多人关注《吾是我师》,谢谢!