标签:算法 row int 溢出 个数 triangle i++ 图片 rip
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,其中 k ≤ 33,返回杨辉三角的第 k 行。
示例: 输入: 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; } }
标签:算法 row int 溢出 个数 triangle i++ 图片 rip
原文地址:https://www.cnblogs.com/baby123/p/10954695.html