每日算法-10 杨辉三角

问题

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

每日算法-10 杨辉三角_第1张图片

在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle


分析

  1. 首先,第一行和第二行,可以直接返回结果,规律从第3行开始

  2. 如果i=3,那么第[0]个元素肯定是1,第[i-1]个元素也肯定是1,其中,第[1]个元素便是上一行的第[0]个3. 元素和第[1]个元素的和。

  3. 如果i=4,那么第[0]个元素肯定是1,第[i-1]个元素也肯定是1,

    • 当要获取j=1时,第[j]个元素是上一行第[j-1]个元素和第[j]个元素的和
    • 当要获取j=2时,第[j]个元素是上一行第[j-1]个元素和第[j]个元素的和

综上,可以对for(j=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;
    }
}

结果

每日算法-10 杨辉三角_第2张图片

你可能感兴趣的:(算法)