zl程序教程

您现在的位置是:首页 >  其他

当前栏目

LeetCode_杨辉三角_简单_118.杨辉三角

LeetCode 简单 杨辉三角 118
2023-09-27 14:25:46 时间

1.题目

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle

2.思路

(1)找规律
首先观察杨辉三角可以得到以下规律:杨辉三角两条腰上的值全部设置为1,并且杨辉三角中任意一个内部的值都等于与其上一行相邻的两个值之和。找到规律后,具体求解步骤如下:
① 定义 list 数组 res,用于保存结果;
② 进行 numRows 层 for 循环来分别求出 numRows 行的杨辉三角,并且需要定义 list 数组 tmpRes 用来保存每一行的结果,在求解过程中,需要分以下两种情况:
若当前值位于杨辉三角的腰上,那么设置为1;
若当前值位于杨辉三角的内部,那么该值等于与其上一行相邻的两个值之和;
③ 每求解出一行的值,就将 tmpRes 添加到 res 中;
④ 循环结束后,返回 res 即可。

3.代码实现(Java)

//思路1————找规律
class Solution {
	public List<List<Integer>> generate(int numRows) {
	    List<List<Integer>> res = new ArrayList<List<Integer>>();
	    for (int i = 0; i < numRows; i++) {
	        //保存第i行的结果,此处是从i=0行开始
	        List<Integer> tmpRes = new ArrayList<Integer>();
	        for (int j = 0; j <= i; j++) {
	            if (j == 0 || j == i) {
	                //设置杨辉三角两条腰上的值,即全部设置为1
	                tmpRes.add(1);
	            } else {
	                //设置杨辉三角内部的值,任意一个内部的值都等于与其上一行相邻的两个值之和
	                tmpRes.add(res.get(i - 1).get(j) + res.get(i - 1).get(j - 1));
	            }
	        }
	        //将第i行的结果保存到res中
	        res.add(tmpRes);
	    }
	    return res;
	}
}