问题
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle
分析
-
首先,第一行和第二行,可以直接返回结果,规律从第3行开始
-
如果i=3,那么第[0]个元素肯定是1,第[i-1]个元素也肯定是1,其中,第[1]个元素便是上一行的第[0]个3. 元素和第[1]个元素的和。
-
如果i=4,那么第[0]个元素肯定是1,第[i-1]个元素也肯定是1,
- 当要获取j=1时,第[j]个元素是上一行第[j-1]个元素和第[j]个元素的和
- 当要获取j=2时,第[j]个元素是上一行第[j-1]个元素和第[j]个元素的和
综上,可以对for(j=1;j<i-1;j++)进行循环获取值的处理。
解法
class Solution
{
/**
* @param Integer $numRows
* @return Integer[][]
*/
function generate($numRows)
{
if ($numRows === 0) {
return [];
}
$triangleArr[0] = ['1']; //第一行
if ($numRows === 1) {
return $triangleArr;
}
$triangleArr[1] = ['1', '1']; //第二行
if ($numRows === 2) {
return $triangleArr;
}
for ($i = 2; $i < $numRows; $i++) {
$triangleArr[$i][0] = 1;
for ($j = 1; $j < $i; $j++) {
$triangleArr[$i][$j] = $triangleArr[$i - 1][$j - 1] + $triangleArr[$i - 1][$j];
}
$triangleArr[$i][$i] = 1;
}
return $triangleArr;
}
}