每日一题20201206(118. 杨辉三角)
118. 杨辉三角
思路
如果你非要按照图片里的样子来看的话,会复杂一点,如果你按照这样的格式:
1
11
121
1331
14641
这样会好理解一点,每次要计算的数,都是上一行的同位置索引+上一行的上个位置的值,如果上一行的上个位置或者上一行的同样位置没有值,则只加上有值的部分。
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
# 防止numRows为0的情况,直接return []
if numRows == 0:
return []
# 为了方便,直接添加第一行数据,这样计算上一行的时候就永远有值
ans = [[1]]
# 索引从1开始,是因为上面我们已经加入了一行数据了
for i in range(1, numRows):
# result是每一行的数据
result = []
# 为什么是i+1,因为我们求的当前行的数据总是比上一行多一个
for j in range(i+1):
# 如果j-1 < 0了,那么说明j=0,那么说明上一行没有前一个数,直接加
# 上上一行的同位置数ans[i-1] 这个是上一行 同位置数是ans[i-1][j]
if j - 1 < 0:
result.append(ans[i-1][j])
# 如果j超出了上一行的索引范围,那么直接加上上一个的最后一个数
elif j > len(ans[i-1]) - 1:
result.append(ans[i-1][j-1])
# 否则都在正常范围内,直接加上ans[i-1]的j和j-1
else:
result.append(ans[i-1][j-1]+ans[i-1][j])
ans.append(result)
return ans
类似的写法
下面那种做法把两端固定了1和1,每次只计算中间的内容
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
result = []
for n in range(numRows):
if n == 0:
result.append([1])
elif n == 1:
result.append([1, 1])
else:
result.append([1] + [x+result[n-1][i+1] for i, x in enumerate(result[n-1][:-1])] + [1])
return result
本文作者:米洛丶
本文链接:https://www.cnblogs.com/we8fans/p/14092797.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
leetcode
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步