算法练习之杨辉三角,杨辉三角的第 k 行

1. 杨辉三角

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

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

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

java

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> rs = new ArrayList<List<Integer>>();
        List<Integer> prior = null;
        for(int i=1;i<=numRows;i++){
            List<Integer> tmp = new ArrayList<>();
            for(int j=0;j<i;j++){
                if(j==0||j==i-1){
                    tmp.add(1);
                }else{
                    tmp.add(prior.get(j-1)+prior.get(j));
                }
            }
            rs.add(tmp);
            prior = tmp;
        }
        return rs;
    }
}

php

class Solution {

    /**
     * @param Integer $numRows
     * @return Integer[][]
     */
    function generate($numRows) {
        $rs = [];
        for($i=1;$i<=$numRows;$i++){
            $tmp = [];
            for($j=0;$j<$i;$j++){
                if($j==0||$j==$i-1){
                    array_push($tmp,1);
                }else{
                    array_push($tmp,$rs[$i-2][$j-1]+$rs[$i-2][$j]);
                }
            }
            array_push($rs,$tmp);
        }
        return $rs;
    }
}

2.杨辉三角的第 

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 行。

示例:
输入: 3
输出: [1,3,3,1]

直接使用组合公式

C(n,i) = n!/(i!*(n-i)!)

则第(i+1)项是第i项的倍数=(n-i)/(i+1);

java

class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> rs= new ArrayList<>();
        long  m = 1;
        for(int i=0;i<=rowIndex;i++){
            rs.add((int)m);
            m = m*(rowIndex-i)/(i+1);
        }
        return rs;
    }
}

注:

  m不能为int,会发生溢出

php

class Solution {

    /**
     * @param Integer $rowIndex
     * @return Integer[]
     */
    function getRow($rowIndex) {
        $m = 1;
        $rs = [];
        for($i=0;$i<=$rowIndex;$i++){
            array_push($rs,(int)$m);
            $m = $m*($rowIndex-$i)/($i+1);
        }
        return $rs;
    }
}

猜你喜欢

转载自www.cnblogs.com/baby123/p/10954695.html