力扣第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
解题思路
在力扣中,题目描述中已经给出了杨辉三角的形态:简单来说,每一行最左边的值和最右边的值都为1,中间的值为其肩膀上两个值的和。
那么我们怎么用代码实现呢?我们可以采用逐行迭代的方法:具体来说,我们在第n行要添加4个元素,除了第一个和最后一个元素要为1,中间的元素是上一行列表中肩膀上的数字的和,那么这样的话就好做了,直接看代码:
class Solution: def generate(self, numRows: int) -> List[List[int]]: # 方法一:暴力解法 if numRows == 1: return [[1]] if numRows == 2: return [[1], [1, 1]] origin_list = [[1], [1, 1]] for rows in range(3, numRows + 1): origin_list.append([]) for j in range(rows): if j == 0 or j == rows - 1: origin_list[rows - 1].append(1) else: origin_list[rows - 1].append(origin_list[rows - 2][j - 1] + origin_list[rows - 2][j]) return origin_list
代码优化版本:
result = [] for i in range(numRows): row = [1] * (i + 1) # 初始化当前行,首尾为1 if i >= 2: # 从第三行开始计算中间值 for j in range(1, i): row[j] = result[i-1][j-1] + result[i-1][j] result.append(row) return result
总结
遇到不懂的问题可以去问一下市面上一些好用的大语言模型,说不定能给出解题思路!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步