将负索引转换为数组(三项三角形)中的正索引

问题描述 投票:1回答:1

我正在尝试找到三项式系数,我想避免在数组中使用负索引。在某些情况下,i或j将变为负数,并将返回数组超出范围的错误。无论如何,我可以将负索引中包含的数组镜像为正索引吗?

这里是递归公式:Recursion Formula

我认识到T(0,-1)= T(0,1),但如何实现?

示例:

行0:T(0,0)= 1,T(0,1)= 0 ...

第1行:T(1,0)= T(0,-1)+ T(0,0)+ T(0,1),T(2,0)...

[三项式系数T(n,k)是(1 + x + x ^ 2)^ n的展开中的x ^(n + k)的系数

三边形三角形(中间索引为0,0左侧为负,0右侧为正):

enter image description here

注意:下面的代码从中间索引0到右侧遍历数组。

public class ClassNameHere {
public static void main(String[] args) {
  int n = Integer.parseInt(args[0]);
  int k = Integer.parseInt(args[1]);
  long[][] DP = new long[n + 1][k + 1];
    DP[0][0] = 1;
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= Math.min(i, k); j++) {
            if (i == j || ((j == 0) && i < 2)) DP[i][j] = 1;
            else if (j < -i) {
                DP[i][j] = 0;
            }
            else DP[i][j] = DP[i - 1][j];
        }
    }
    System.out.println(DP[n][k]);
  }
}

编辑:现在,我可以使用我的代码从T(0,0)到T(1,0)来获取术语,但是无法通过添加T(1,0)+继续超过T(2,0) T(1,1)+ T(1,2)。当我尝试实现[j + 1]时,它再次返回arraysoutofbounds ..我认为上述语句的实现有问题^有关如何进行此操作的任何建议?

java arrays multidimensional-array
1个回答
0
投票

我已找到原因。

可以通过在2D数组中初始化正确的长度来完成。

long[][] tri = new long[n + 1][k + n + 1];

并使用Math.abs()处理j索引将流向负索引的实例。

tri[i][j] = tri[i - 1][Math.abs(j - 1)] + tri[i - 1][j] + tri[i - 1][j + 1];
© www.soinside.com 2019 - 2024. All rights reserved.