Java 将数组中的负索引转换为正索引(三项式三角形)
我试图找到三项式系数,我想避免在数组中使用负索引。在某些情况下,i或j将变为负值,并返回数组越界错误。是否可以将负索引中包含的数组镜像为正索引 下面是递归公式: 我认识到Java 将数组中的负索引转换为正索引(三项式三角形),java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我试图找到三项式系数,我想避免在数组中使用负索引。在某些情况下,i或j将变为负值,并返回数组越界错误。是否可以将负索引中包含的数组镜像为正索引 下面是递归公式: 我认识到T(0,-1)=T(0,1)但是我如何实现它呢 例如: row 0: T(0, 0) = 1 , T(0, 1) = 0 ... row 1: T(1, 0) = T(0, -1) + T(0, 0) + T(0, 1) , T(2, 0) ... 三项式系数T(n,k)是x^(n+k)在(1+x+x^2)^n的展开式中的系
T(0,-1)=T(0,1)
但是我如何实现它呢
例如:
row 0: T(0, 0) = 1 , T(0, 1) = 0 ...
row 1: T(1, 0) = T(0, -1) + T(0, 0) + T(0, 1) , T(2, 0) ...
三项式系数T(n,k)
是x^(n+k)
在(1+x+x^2)^n的展开式中的系数
三项式三角形(中间索引为0
,在0
左侧为负数,在0
右侧为正数):
注意:下面的代码从中间索引0
到右侧遍历数组
此处为公共类classname{
公共静态void main(字符串[]args){
int n=Integer.parseInt(args[0]);
intk=Integer.parseInt(args[1]);
long[]DP=新长[n+1][k+1];
DP[0][0]=1;
对于(inti=0;i我已经找到了原因
可以通过在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];
您可以按如下方式填充这样的数组:首先创建一个新的空数组,其高度n
和宽度2n+1
,用零填充,并将上中点的第一个条目设置为1
,然后遍历行和列,并将其他条目设置为其上三个条目的总和:
T[i][j]=T[i-1][j-1]+T[i-1][j]+T[i-1][j+1];
代码:
int n=7;
//用零填充的新数组
int[]arr=新int[n][2*n+1];
//第一项
arr[0][n]=1;
//迭代数组中的行
//从第二个开始
对于(int i=1;i
//输出
对于(int[]行:arr){
for(整型单元格:行)
如果(单元格>0)
System.out.printf(“%3d”,单元格);
其他的
系统输出打印(“”);
System.out.println();
}
输出:
1
1 1 1
1 2 3 2 1
1 3 6 7 6 3 1
1 4 10 16 19 16 10 4 1
1 5 15 30 45 51 45 30 15 5 1
1 6 21 50 90 126 141 126 90 50 21 6 1
另见: