从左下角到右上角对角地遍历2D阵列矩阵

时间:2014-07-19 00:42:01

标签: java arrays matrix

我有一个由2D数组表示的3x4矩阵:

. 0  1  2  3
0 a  c  f  i   
1 b  e  h  k
2 d  g  j  l

我遍历对角切片的方法是将每个切片视为一个总和,如下所示:

a = (0+0) = 0
b,c = (0+1),(1+0) = 1
d,e,f = (0+2),(1+1),(2+0) = 2
g,h,i = (1+2),(2+1),(3+0) = 3
j, k = (2+2),(3+1) = 4
l = (3+2) = 5

然而,我的代码现在以我想要的方式打印它,从右上角到左下角。

当前输出为:

acbfedihgkjl

所需的输出是:

abcdefghijkl

        for (int sum = 0; sum <= numRows + numColumns - 2; sum++) {
            for (int i = 0; i < numRows; i++) {
                int j = sum - i;

                if ((i >= 0 && i < numRows) && (j >= 0 && j < numColumns)) {
                    System.out.print(array[i][j]);
                }
            }
        }

有人能指出我如何修复我的代码以获得我想要的输出吗?

2 个答案:

答案 0 :(得分:0)

int i = 0;
int j = 0;
int n = 0;
int x = 3;
int y = 4;
int newSize = Math.max(x,y) * Math.max(x,y);

while(n < newSize){
    if(i <= x && j <= y)
        System.out.println(array[i][j]);
    n++;
    if(i == 0) {
        i = n:
        j = 0;
    } else {
        --i;
        ++j;
    }
}

答案 1 :(得分:0)

虽然不是很漂亮,但我认为这样做会很好:

int i = 0;
int j = 0;
while (true) {
    System.out.println("" + array[i][j]);
    --i;
    ++j;
    if (i < 0) {
        if (j == numCols)
            break;
        i = Math.min(j, numRows - 1);
        j = Math.max(j - numCols + 2, 0); 
    } else if (j >= numCols) {
        if (i == numRows - 2)
            break;
        i = numRows - 1;
        j = Math.max(j + 2 - numCols + i, 0);
    }
}