杨辉三角 II

题意:

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。

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

杨辉三角 II_第1张图片

示例 1:

输入: rowIndex = 3
输出: [1,3,3,1]

示例 2:

输入: rowIndex = 0
输出: [1]

示例 3:

输入: rowIndex = 1
输出: [1,1]

提示:

  • 0 <= rowIndex <= 33

进阶:
你可以优化你的算法到 O(rowIndex) 空间复杂度吗?

题目来源: https://leetcode.cn/problems/pascals-triangle-ii/description/

解题方法:

先得出对应的杨辉三角,再返回对应 rowIndex 行数据

/**
 * @param Integer $rowIndex
 * @return Integer[]
*/
function getRow($rowIndex) {
    $array = [];
    for($i = 0; $i < $rowIndex + 1; $i++) {
        $li = [];
        for($j = 0; $j <= $i; $j++){
            if($j == 0 || $j == $i){    //每一层的开头和结尾都是1
                array_push($li, 1);
            }else{
                //第i层的第j个元素 = i-1层的第j个元素 + i-1层的第j-1元素
                array_push($li, $array[$i - 1][$j] + $array[$i - 1][$j - 1]);
            }
        }
    array_push($array, $li);
    }       
    return end($array);
}

以上方法还可以优化为直接返回对应行数据

function generate($numRows) {
    $res = [];
    for($i = 0; $i < $numRows; $i++){		
	$li = [];
    	for($j = 0; $j <= $i; $j++){
        	if($j == 0 || $j == $i){	//每一层的开头和结尾都是1	
				array_push($li, 1);
			}else{
				//第i层的第j个元素 = i-1层的第j个元素 + i-1层的第j-1元素
				array_push($li, $res[$i - 1][$j] + $res[$i - 1][$j - 1]);	
			}
        }
		array_push($res, $li);
       }
    return $res;
}

你可能感兴趣的:(PHP,算法,php,数据结构)