标签:
数组、动态规划
题目:
给定一个非负整数 num ,生成杨辉三角的前 num 行。
杨辉三角中,每个数是左上方和右上方的数之和。
数据范围: 1 ≤ num ≤ 30
例如当输入为4时,对应的返回值为[[1],[1,1],[1,2,1],[1,3,3,1]],打印结果如下图所示:
反思:
其实掌握了杨辉三角的规律的话,这道题目还是很好解决的
规律一:dp[n][0] = 1 和 dp[n][len - 1]= 1
规律二:每个数是左上方和右上方的数之和
规律三:n行有n个数
需要注意的是:
1、下标的巧妙设置。
2、如何动态分配内存空间给对应的指针。
思路:
1、由于输入n行,所以数组有n行,既int[][] dp = new int[num][]。
2、用循环的方式来给指针动态分配内存空间大小。
3、先将分配完的数组全部赋值为1。
4、物理位置第一个和倒数第二个的每个数是左上方和右上方之和。
用到的知识点:
数组、动态内存分配、动态规划
代码:
public int[][] generate2(int num) {
// write code here
int[][] dp = new int[num][];
for (int i = 0; i < num; i++) {
dp[i] = new int[i + 1];
for (int j = 0; j < dp[i].length; j++) {
dp[i][j] = 1;
}
for (int j = 1; j < dp[i].length - 1; j++) {
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
}
}
return dp;
}