本文主要是介绍LeetCode118. Pascal's Triangle-python(easy),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目来源:
https://leetcode.com/problems/pascals-triangle/description/
题目分析:
本题旨在给定一个整数作为层数,然后输出该层的Pascal's triangle.形如:
[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]
]
从第三层开始,我们可以发现,下面的一个数字是其肩上两个数字之和。因此我们可以写出一下代码。
解决代码:
class Solution:def generate(self, numRows):""":type numRows: int:rtype: List[List[int]]"""biao=[]for i in range(numRows):biao.append([1]*(i+1))%%注意这种生成(i+1)个1的方法if(i>1):for j in range(1,i):biao[i][j]=biao[i-1][j-1]+biao[i-1][j]return biao
另外看到有的大神是这样做的。实际上每一行都可以用上一行的数字偏移然后相加得到,偏移需要补0。
[1,0]
+[0,1]
=[1,1][1,1,0]
+[0,1,1]
=[1,2,1][1,2,1,0]
+[0,1,2,1]
=[1,3,3,1]
因此其代码是这样的(利用python2代码)
def generate(self, numRows):res = [[1]]for i in range(1, numRows):res += [map(lambda x, y: x+y, res[-1] + [0], [0] + res[-1])]return res[:numRows]
需要学习的是这里的map用法。
map()是 Python 内置的高阶函数,在Python3.0版本中,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,返回一个list的遍历对象(迭代器,需循环输出里面的值)。如果想得到一个list列表,则用list(map())进行强制转换。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表,而原列表不发生变化。
这篇关于LeetCode118. Pascal's Triangle-python(easy)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!