贺胖娇的编程之旅......

118. 杨辉三角

2021.09.03

题目来源: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;
    }
}

其他优质解法分析

发表评论