LeetCode算法第118. Pascal's Triangle

liftword3个月前 (02-13)技术文章16

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

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

我会持续分享下去,敬请您的关注。

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

问题描述:

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

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

示例:

C语言实现:

杨辉三角其实并不是杨辉发现的,最早是北宋数学家贾宪发现的。

如果贾宪要是知道自己发现的东西没拿自己的名字命名,会不会也像牛顿一样和莱布尼茨争命名权?

回归正题。杨辉三角的构建方式,题目中已经描述的很清楚。除此之外,它有至少如下的两个特点:

  1. 每一行的第一个和最后一个元素总是1;
  2. 第n行有n个元素;

更直观一点,可用下图表示:

因此我们可以写出如下的代码:

Java语言实现:

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

由于用的是List不是数组,所以每行首尾的元素的赋值和C的实现有所不同。

再有就是,当numRows大于0的时候,在循环之前,我先创建了第一行,即[1],然后从i=1开始遍历;这样做是为了避免循环中每次if判断。

具体代码如下:

Python语言实现:

Python 的实现和Java语言的实现基本一致。

只是在创建每一行的元素时,我们可以直接用zip或者map来实现,通过我的测试,两种方式性能差不多。

具体代码如下:

题外话。如果从贾宪算起,杨辉三角要比欧洲早提出差不多600年。古代的中国科技还是相当可以的。到了近代,百年屈辱,国运急转直下,三次工业革命中国都没赶上,导致科技严重滞后,经过一代中国人奋发图强,才有今天的中国。美国等西方国家对中国技术的封锁,已经相当的不要脸。验证了习主席的那句话,"核心技术买不来,换不了"。必须要技术自强。或许,此次西方对中国的技术封锁是中国芯片设计制造和操作系统研发的一次机遇。中国人历来都是在逆境中越战越勇。希望明天凭借着中国人的勤劳和智慧,中国的软件芯片能处于世界第一梯队。好运中国!加油中国!


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

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


相关文章

数学之美:神奇的杨辉三角形,比西方早近600年,致敬古代数学家

小朋友们好,大朋友们好!我是猫妹,一名爱上Python编程的小学生。和猫妹学Python,一起趣味学编程。今日主题什么是杨辉三角形?杨辉三角形有什么规律?中国古代数学家杨辉。西方科学家帕斯卡。杨辉三角...

100个Python小例子_python小例子代码

原题地址:http://www.runoob.com/python/python-100-examples.html,原例为py2.7版本,重写过程中有不少是随意发挥的,重写运行版本:Python3....

用Python来实现秦九韶算法_python秦九韶算法例题解析

秦九韶介绍秦九韶是我国古代数学家的杰出代表之一,他与李冶、杨辉、朱世杰并称宋元数学四大家。他的《数书九章》概括了宋元时期中国传统数学的主要成就,尤其是系统总结和发展了高次方程的数值解法与一次同余问题的...