题记:
给定一个非负整数 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/leetbook/read/top-interview-questions-easy/xncfnv/
来源:力扣(LeetCode)
解题方法:
首先观察这个三角形的特点,杨辉三角形是一个等边三角形,其中左边和右边每个格子的值都是1。
三角形斜的不好看,如果我们把这个三角形往左边拉直就会发现,除了两边的都是1以外,其他每个格子的值都是他正上面格子和左上角格子的和。
来看下代码
public static List<List<Integer>> generate(int numRows) {//结果值List<List<Integer>> res = new ArrayList<>();//每一行的元素ArrayList<Integer> row = new ArrayList<>();for (int i = 0; i < numRows; i++) {//下面一行都会比上面一行多一个元素,我们在第一个位置给他加个1row.add(0, 1);//遍历每一行的结果,遍历的时候跳过第一个和最后一个,//每个格子的值都是他正上面和左上角元素的和for (int j = 1; j < row.size() - 1; j++)row.set(j, row.get(j) + row.get(j + 1));//把结果存放到res中res.add(new ArrayList<>(row));}return res;
}
其实上述方法也就是双循环去解决问题
第i层的第j个元素 = i-1层的第j个元素 + i-1层的第j-1元素
class Solution {/*** @param Integer $numRows* @return Integer[][]*/function generate($numRows) {$res = [];for($i = 0; $i < $numRows; $i++){ $li = [];for($j = 0; $j <= $i; $j++){if($j == 0 || $j == $i){ //每一层的开头和结尾都是1 array_push($li, 1);}else{//第i层的第j个元素 = i-1层的第j个元素 + i-1层的第j-1元素array_push($li, $res[$i - 1][$j] + $res[$i - 1][$j - 1]); }}array_push($res, $li);}return $res;}
}$numRows = 5;
$solution = new Solution();
$res = $solution->generate($numRows);
print_r($res);// numRows 1; res = [[1]]
// numRows 2; res = [[1],[1,1]]
// numRows 3; i=0;j=0 $li=[1] res = [[1]]
// i=1;j=0 $li=[1] j=1 $li = [1,1] res = [[1],[1,1]]
// i=2;j=0 $li=[1] j=1 $li = [1,2] j=2 $li = [1,2,1] res = [[1],[1,1],[1,2,1]]/**=输出结果为:
Array
([0] => Array([0] => 1)[1] => Array([0] => 1[1] => 1)[2] => Array([0] => 1[1] => 2[2] => 1)[3] => Array([0] => 1[1] => 3[2] => 3[3] => 1)[4] => Array([0] => 1[1] => 4[2] => 6[3] => 4[4] => 1)
)
**/
方法来源:
作者:数据结构和算法
链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xncfnv/?discussion=jBwyhy
来源:力扣(LeetCode)
作者:快乐可以当钱花
链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xncfnv/?discussion=rvqScA
来源:力扣(LeetCode)