解题思路
这道题诠释了杨辉三角中组合之间的规律, 即Cmn = Cm-1n-1 + Cmn-1, 而杨辉三角本身与二项式展开式系数也有密切的联系~
解题关键是:
根据组合的公式 Cmn = n!/(m!(n-m)!) 那么Cm-1n = n!/((m-1)!(n-m+1)!)
推导出 Cmn = Cm-1n * (n - m + 1)/m, 即每一行的后一个元素等于前一个元素*(总个数 - 当前索引 + 1)/ 当前索引, 已知第一个元素为1, 则可推导出整行的值。
代码
-spec get_row(RowIndex :: integer()) -> [integer()].
get_row(RowIndex) ->
do_get_row(1, #{pre => 1, nums => [1], row_index => RowIndex}).
do_get_row(N, Args = #{pre := PreNum, nums := Nums, row_index := RowIndex}) when N =< RowIndex ->
Num = PreNum * (RowIndex - N + 1) div N,
do_get_row(N + 1, Args#{pre := Num, nums := [Num | Nums]});
do_get_row(_, #{nums := Nums}) ->
lists:reverse(Nums).