欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

求杨辉三角的第 k 行(时间复杂度为O(k))

程序员文章站 2024-03-15 19:03:12
...

119. 杨辉三角 II

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

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

以下时间复杂度为O(k),空间复杂度O(1)。

求杨辉三角的第 k 行(时间复杂度为O(k))

示例:

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

分析:

杨辉三角的第n行其实就是(a+b)^n展开式的系数,而第i项展开式的系数为C(n,i);

组合公式可得出C(n,i) = n! / (i! * (n-i)! ),即第i+1项是第i项的 (n-i)/(i+1)倍,根据这个规律我们可以推出第n行的每一项。

代码:

//组合公式C(n,i)=n!/(i!*(n-i)!)
//i+1项是第i项的(n-i)/(i+1)
class Solution {
    public List<Integer> getRow(int rowIndex) {
        List<Integer> result = new ArrayList<>();
        long num = 1;
        for(int i=0; i<=rowIndex; i++){
            result.add((int)num);
            num = num*(rowIndex-i)/(i+1);
        }
        return result;
    }
}