java 求二维阵列的反对角线

d8tt03nd  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(190)

这是打印2d数组的反对角的代码,如果给定数组
{{1,2,3}, {4,5,6}, {7,8,9}}
它应该返回

`{
{1},
{2,4},
{3,5,7},
{6,8},
{9}
}`

这是密码:

public static int[][] antiDiagonal(int [][]x){
int[][]res = new int[2*x.length-1][];
int s = 0;

for( int i = 0 ; i < res.length ; i++ ) {
    if(i<= res.length/2)
        s = i+1;
    else
        s = s -1;
    res[i] = new int[s];
    for( int j = i, r = 0 ; j >= 0 && r < res[i].length ; j-- ) {
        
        if( (i-j) < x.length && j < x.length ){
            res[i][r] = x[i-j][j] ;
            r++;
        }
    }
}

return res;
}

我的大脑无法处理内部for循环的功能

for( int j = i, r = 0 ; j >= 0 && r < res[i].length ; j-- ) {

    if( (i-j) < x.length && j < x.length ){
        res[i][r] = x[i-j][j] ;
        r++;
    }
}

我只需要在我的理智堕落之前解释一下内部for循环实现了什么,你的回应将非常感谢。
我可以使用数组列表的替代解决方案,但问题的唯一目的是只使用二维数组。我已经理解了代码的所有部分,除了内部的for循环。

gjmwrych

gjmwrych1#

内部的for循环获取输入数组,沿对角线遍历它,并将每个对角线元素存储在新数组中。
i是新数组的当前行,j用于遍历输入数组并找到反对角元素,r是新数组中当前列的索引
ji开始,每次迭代递减,而r递增,这使得循环对角遍历输入数组:从最后一行/第一列到第一行/最后一列
if语句检查用于访问输入数组的索引是否在数组的边界内,如果在边界内,则在新数组中分配输入数组的相应值
您可以尝试使用一个示例,并通过在每个步骤处停止来调试代码,以便更好地理解该过程。

相关问题