Java 帕斯卡三角/杨辉三角

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/macanv/article/details/79337357

帕斯卡三角在国内教科书中成为杨辉三角,他们形如下图:
这里写图片描述
观察其规律,可以看到每一层的其实和结束都是1,层数和元素个数相同。在当层数大于2层,非起始元素的值计算公式为:data[i][j] =data[i-1][j-1] + data[i-1][j]
分析到这里,解决方法已经出来了,我们使用递推公式,对每一层的元素进行处理,下面给出对应的实现:

1. 使用递推公式求解杨辉三角

    public List<List<Integer>> testPascal(int numRows) {
        List<List<Integer>> rst = new ArrayList<>();
        if (numRows < 0){
            return null;
        }
        for (int i = 0; i < numRows; ++i) {
            List<Integer> current = new ArrayList<>();
            //开始元素为1
            current.add(1);
            //当层数大于2层的时候,使用迭代公式
            if (i > 1) {
                for (int j = 1; j < i; ++j) {
                    List<Integer> tmp = rst.get(i - 1);
                    current.add(tmp.get(j - 1) + tmp.get(j));
                }
            }
            if (i > 0) {
                current.add(1);
            }
            rst.add(current);
        }
        return rst;
    }

2. 使用数学变换求解杨辉三角

在维基百科上可以看到,杨辉三角其实可以通过数学变换,其与二项式展开形式一致。具体可以去维基百科上看,实现可以参考这篇博客:
https://www.cnblogs.com/JumperMan/p/6759422.html

猜你喜欢

转载自blog.csdn.net/macanv/article/details/79337357