链接:https://leetcode-cn.com/problems/pascals-triangle/
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
1、定义数组元素的含义
定义 dp 数组用来存储生成的杨辉三角的每个数;
2、找出数组之间的的关系式
因为在杨辉三角中,每个数是它左上方和右上方的数的和。所以当遍历 dp 数组时,数组为 0 的位置递归表达式为:dp[i][j]=dp[i-1][j-1]+dp[i-1][j]
3、找出初始值
初始化 dp 数组,numRows 表示 dp 数组的行数,每一行的元素个数等于所处第几行。首先将 dp 数组全部初始化为 0,之后将边界全部初始化为1。
时间复杂度:O(n^2)
空间复杂度:O(n^2),这个空间是返回值占用的空间。
Python:
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
dp=[[0]*i for i in range(1,numRows+1)]
for i in range(numRows):
dp[i][0]=dp[i][-1]=1
for i in range(numRows):
for j in range(i+1):
if dp[i][j]==0:
dp[i][j]=dp[i-1][j-1]+dp[i-1][j]
return dp
Go:
func generate(numRows int) [][]int {
dp:=make([][]int,numRows)
for i:=range dp{
dp[i]=make([]int,i+1)
dp[i][0]=1
dp[i][i]=1
for j:=1;j<i;j++{
dp[i][j]=dp[i-1][j]+dp[i-1][j-1]
}
}
return dp
}
如果觉得文章不错,希望大家可以点击上方名片关注我噢,点赞、收藏、在看、分享就再好不过了。如果有任何建议和问题,可以在下方给我留言,我会及时回复的,同时会不定期更新更多的文章,祝我们终将自由。