杨辉三角--(方法一)

 import java.math.BigInteger;

/**

 * 类名: TestYangHuiSanJiao 说明: 用三种方法输出”杨辉三角” 注: 最简单的方法就是是定义一个二维数组, 保存产生的所有”杨辉三角”值, 但是如果要输入一个比较大的”杨辉三角”(如* 100000行),就必需申请一个100000 * 100000的数组,那就需要37多G的内存,正常工作或者家用电脑应该没有能达到这个 要求的,就算是10000 * 10000 的数组也需要400M左右的内存.

 * 所以,只需要记录对后面计算有用的”杨辉三角”值.

 */

public class TestYangHuiSanJiao

{

    public static void main(String[] args)

    {

        YangHui1 yangHuiTest = new YangHui1(100);

        yangHuiTest.printYangHui();

    }

}

/**

 * 类名: YangHui1 说明: 定义两个一维数组,分别记录上一行的值和当前行的值 注: 当前行的”杨辉三角”值完全依赖于上一行的值,而当前行的值会影响下一行的值的计算,故利用上一行的值计算当前行的值,并记录当前行的值用于下一行的计算.

 */

class YangHui1

{

    BigInteger[]    arr1;    // 定义数组记录上一行的值;

    BigInteger[]    arr2;    // 定义数组记录当前行的值, 计算完成后将本数组值赋给arr1,用于下一次计算

    int                intNum; // 记录”杨辉三角”行数

    /**

     * 入口参数: “杨辉三角”行数 说明: 类变量初始化过程

     */

    YangHui1(int intNum) // 构造函数

    {

        arr1 = new BigInteger[intNum]; // “杨辉三角”一行最多有N个值,根据需要定义数组大小

        arr2 = new BigInteger[intNum];

        this.intNum = intNum; // 记录”杨辉三角”行数

        arr1[0] = BigInteger.valueOf(1); // 每行第一个元素始终为1

        arr2[0] = BigInteger.valueOf(1);

        for (int i = 1; i < arr1.length; i++)

        {

            arr2[i] = BigInteger.valueOf(0); // 对象数组初始化过程

            arr1[i] = BigInteger.valueOf(0); // 对象数组初始化过程

        }

    }

    void printYangHui() // 计算并打印”杨辉三角”

    {

        System.out.println(arr2[0]); // 第一行为特殊情况,故直接打印

        for (int i = 1; i < intNum; i++) // 进入循环,从第2行开始计算打印”杨辉三角”

        {

            System.out.print(arr2[0] + “/t”); // 打印每行第1个值

            // 说明: 用上一行下标小1和同下标元素得到当前元素, 这时上一行下标小1的元素不再有价值,可以将其覆盖

            for (int j = 1; j <= i; j++) // 从第2个值开始计算打印

            {

                arr2[j] = arr1[j – 1].add(arr1[j]); // 当前值为上一行(arr1中记录的值)中同下标与比当前下标小1的元素和

                System.out.print(arr2[j] + “/t”); // 打印当前元素

                arr1[j – 1] = arr2[j – 1]; // arr1中当前下标对应元素值在下一次计算中会用到, 而下标小1的元素在

                // 本次计算中运用过了,所以将当前计算元素的前一元素赋给arr1

            }

            arr1[i] = arr2[i]; // 本行计算完毕, 将最后一个元素赋给出arr1用于下一行计算

            System.out.println(); // 换行

        }

    }

}

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/ufoyao0621/article/details/3591358
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞