返回杨辉三角第rowIndex行的元素。
思路:
一般的思路会是从第一行开始,一行一行递推,得到下一行的元素。
杨辉三角其实是二项式系数 C n k C_{n}^{k} Cnk,只需要知道是第n行第k项就能得到,不需要一行一行计算。
C n k = A n k / k ! = n ! / k ! ( n − k ) ! C_{n}^{k} = A_{n}^{k} / k! = n! / k! (n-k)! Cnk=Ank/k!=n!/k!(n−k)!
直接计算阶乘运算量大。
我们知道第一项一定是1,可以根据前一项推后一项。
第k-1项:
C
n
k
−
1
=
n
!
/
(
k
−
1
)
!
(
n
−
k
+
1
)
!
C_{n}^{k-1} = n! / (k-1)! (n-k+1)!
Cnk−1=n!/(k−1)!(n−k+1)!
第k项:
C
n
k
=
n
!
/
k
!
(
n
−
k
)
!
C_{n}^{k} = n! / k! (n-k)!
Cnk=n!/k!(n−k)!
所以后一项 = 前一项 * (n-k+1)/k
public List<Integer> getRow(int rowIndex) {
List<Integer> res = new ArrayList<>();
res.add(1);
if(rowIndex == 0) return res;
long tmp = 1;
for(int k = 1; k < rowIndex; k++) {
tmp = tmp * (rowIndex - k + 1) / k;
res.add((int) tmp);
}
res.add(1);
return res;
}