Java 中的帕斯卡三角形程序

2025年5月13日 | 阅读 4 分钟

杨辉三角是一个二项式系数构成的三角形模式,其中每个元素是它上面两个数字之和。在 Java 中,可以通过多种方法生成,包括阶乘法nCr 公式)和迭代法,后者利用了杨辉三角的恒等式。

该程序接收一个整数 N 作为输入,并显示杨辉三角的前 N 行。迭代法更为有效,因为它基于已计算出的值来计算每个值,从而最大限度地减少重复计算。杨辉三角常用于组合学、概率论和二项式展开。

示例 1

输入

N = 5

输出

 
        1
      1   1
    1   2   1
  1   3   3   1
1   4   6   4   1   

示例 2

输入

N = 7

输出

 
            1
          1   1
        1   2   1
      1   3   3   1
    1   4   6   4   1
  1   5  10  10   5   1
1   6  15  20  15   6   1   

方法:使用 nCr 公式(二项式系数法)

此方法利用数学上的二项式系数公式来计算杨辉三角中的值。行 i 和列 j 的每个元素由下式给出:

C(i, j) = i! / (j! * (i - j)!)

它不是存储前几行,而是直接使用阶乘来计算每个元素。此方法确保了正确性,但涉及重复的阶乘计算,对于大的 N 来说效率不高。它适用于小的 N 值,并且避免了额外的空间使用。

算法

步骤 1:创建一个函数,通过循环计算一个数的阶乘,将从 1 到 n 的所有整数相乘。

步骤 2:调用阶乘函数,使用公式 nCr = n! / (r! * (n - r)!) 来计算杨辉三角中的每个元素。

步骤 3:在每行打印数字之前添加空格,以使三角形居中对齐,获得正确的格式。

步骤 4:遍历行中的每个元素,计算 nCr(i, j),打印值,并插入空格以获得正确的间距。

步骤 5:对从 0 到 N-1 的所有行重复此过程,以生成完整的杨辉三角。

让我们在 Java 程序中实现上述步骤。

输出

 
        1   
      1   1   
    1   2   1   
  1   3   3   1   
1   4   6   4   1      

复杂度

时间复杂度:O(N²),因为我们计算了 O(N²) 个元素的 nCr(i, j)。

空间复杂度:O(1),因为只使用了几个变量。

让我们讨论另一种解决问题的方法。

算法

步骤 1:杨辉三角的每一行都以数字 1 开始,因为每一行的第一个元素总是 1。

步骤 2:在打印数字之前,打印空格以使三角形居中对齐,使其看起来对称。

步骤 3:使用公式

此公式有助于使用先前计算的元素计算行中的下一个元素,避免了重复的阶乘计算。

步骤 4:打印计算出的数字,后跟适当的空格,以保持杨辉三角的正确结构和可读性。

步骤 5:对每一行重复上述步骤,直到打印出所需的行数 (N),确保显示正确的杨辉三角。

让我们在 Java 程序中实现上述步骤。

输出

 
        1   
      1   1   
    1   2   1   
  1   3   3   1   
1   4   6   4   1      

复杂度

时间复杂度:O(N²),因为我们对三角形中的每个元素进行一次计算。

空间复杂度:O(1),因为只使用了几个整数 变量