1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| 思路: 先确定三角形的前两层为[1]和[1,1],第三层开始,为[1,2,1] 规律为首尾为1,data[] = 上一层的m[i]+m[i+1] 循环次数,为上一层可遍历次数,第二层可以遍历一次就完成整层值相加,第三层就是循环一次 第三层需要遍历两次完成前后顺序两两相加,第四层就是循环两次,总结循环次数就是上一层的数目减一
代码:
/** * @param Integer $numRows * @return Integer[][] */ function generate($numRows) { if ($numRows === 1) { return [[1]]; }
if ($numRows === 2) { return [[1], [1, 1]]; }
// 前两层是固定的值 $res = [ [1], [1, 1], ];
for ($i = 2; $i < $numRows; $i++) { $data = [];
// 获取上一层的值 $lastData = $res[$i - 1]; // 首尾为1 $data[] = 1; // 遍历上一层的值,将相邻值相加的值存入$data for ($j = 0; $j < count($lastData) - 1; $j++) { $data[] = $lastData[$j] + $lastData[$j + 1]; }
$data[] = 1;
$res[] = $data; }
return $res; }
|