携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
本题考察数列相关知识,为简单题118.杨辉三角
118. 杨辉三角
题目
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
提示:
1 <= numRows <= 30
代码
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
if numRows == 0: return []
res = [[1]]
while len(res) < numRows:
newRow = [a+b for a, b in zip([0]+res[-1], res[-1]+[0])]
res.append(newRow)
return res
解析
对于学数学的我来说,杨辉三角是什么是很好理解的,难在虽然我知道它长什么样子可以用笔在纸上画出来,但是表示成矩阵还是比较难的,想过用多个for循环一步一步的算出来,写起来有点儿傻,但是很好理解,后来看了“内行”写的方法,原来可以用函数zip来简化步骤啊,有时候涨知识的一天呢!
具体过程:
1.如果是0行,直接返回空的即可
2.定义一个一行一列的矩阵res
3.用while循环,嵌套一个for循环
4.用zip([0]+res[-1], res[-1]+[0])实现错位,直接相加就是它左上方和右上方的数的和
5.把结果加到res里继续while循环直到结束即可
补充
zip()函数示例
m = [[1,2,3], [4,5,6], [7,8,9]]
n = [[2,2,2], [3,3,3], [4,4,4]]
list(zip(m))
输出:
[([1, 2, 3],), ([4, 5, 6],), ([7, 8, 9],)]
m = [[1,2,3], [4,5,6], [7,8,9]]
n = [[2,2,2], [3,3,3], [4,4,4]]
list(zip(m,n))
输出:
[([1, 2, 3], [2, 2, 2]), ([4, 5, 6], [3, 3, 3]), ([7, 8, 9], [4, 4, 4])]
来源:力扣(LeetCode)
链接:leetcode.cn/problems/pa…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。