题目来源:118. 杨辉三角
题目描述
给定一个非负整数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
自行解法
可以判断出以下结论:
(1)每一项的第一个和最后一个都是1
(2)每一项的个数等于所在项的位置
(3)每一项除开第一个和最后一个数字,假设所在位置为i,其他的数字应该等于上一项的i-1和i下标的值之和
根据以上结论可以实现如下代码:
class Solution {
/**
* @param Integer $numRows
* @return Integer[][]
*/
function generate($numRows) {
$ret = [];
for ($i = 0; $i < $numRows; $i++) {
$cont = [];
for ($j = 0; $j < $i + 1; $j ++) {
if ($j == 0 || $j == $i) {
$cont[$j] = 1;
} else {
$cont[$j] = $ret[$i - 1][$j - 1] + $ret[$i - 1][$j];
}
}
$ret[$i] = $cont;
}
return $ret;
}
}