1. 题目描述
给定一个非负整数 *numRows,*生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
提示:
1 <= numRows <= 30
Tips: 力扣:leetcode-cn.com/problems/pa…
2.思路分析
杨辉三角中有这样一个特性:每行最左侧与最右侧的数字以外,每个数字等于它的左上方与右上方两个数字之和。三角形同样也可以当做一个二维数组。
- 将杨辉三角进行一个变化
-
用n[row] [col] 二维数组描述杨辉三角,这样描述一部分
-
n[3] [2] = n[2] [1] + n[2] [2],观察图可以知道n[row] [col] = n[row-1] [col-1] + n[row-1] [col],如果col<0 或者 row > 0 那么对应的位置值看成0。把左侧和右侧的值也弄成杨辉三角的特性。
3. AC代码
class Solution {
public List<List<Integer>> generate(int numRows) {
int[][] dp = new int[numRows+1][numRows+1];
for(int i = 1; i <= numRows;++i){
dp[i][1] = 1;
}
List<List<Integer>> result = new ArrayList<>();
List<Integer> item = new ArrayList<>();
item.add(1);
result.add(item);
for(int i = 2; i <= numRows; ++i){
item = new ArrayList<>();
for(int j = 1; j <= i; ++j){
dp[i][j] = dp[i-1][j-1]+dp[i-1][j];
item.add(dp[i-1][j-1]+dp[i-1][j]);
}
result.add(item);
}
return result;
}
}
4. 总结
通过观察动态图了解杨辉三角的特性,然后根据特性进行规律的查找。把规律通过代码进行表达得到最终的运行结果。这个需要注意一个地方就是最左侧和最右侧的数字。通过增加一个二维数组的行和列将杨辉三角的特性进行统一。这样可以避免特殊处理最左侧和最右侧的数据。
我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢