Erlo

力扣第118题-杨辉三角

2025-03-08 17:29:09 发布   9 浏览  
页面报错/反馈
收藏 点赞

题目描述

给定一个非负整数 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 

解题思路

在力扣中,题目描述中已经给出了杨辉三角的形态:简单来说,每一行最左边的值和最右边的值都为1,中间的值为其肩膀上两个值的和。

image

那么我们怎么用代码实现呢?我们可以采用逐行迭代的方法:具体来说,我们在第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

总结

遇到不懂的问题可以去问一下市面上一些好用的大语言模型,说不定能给出解题思路!

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认