java - 二维数组对角填充

标签 java arrays

1 2 3
4 5 6
7 8 9

这是我的普通数组,但我需要像这样对角排列

1 2 4
3 5 7
6 8 9

这是使它工作的非常愚蠢的方法,但即使它不起作用,因为我找不到第二列元素。

for (i = 0; i < arr.length; ++i) {
    for (n = 0; n < arr[0].length; ++n) {
        if (i == 0 && n == 0){
            arr[i][n] = 0;
        } else if (i == 0 && n == 1) {
            arr[i][n] = 2;
        } else if (i == 1 && n == 0) {
            arr[i][n] = 3;
        } else if (n == 0) {
            arr[i][n] = arr[i - 1][n] - arr[i - 2][n] + 1 + arr[i - 1][n];
        } else {
            arr[i][n] = arr[i][n - 1] - arr[i][n - 2] + 1 + arr[i][n - 1];
        }
    }
}

最佳答案

好吧,如果您要为该填充模式枚举索引,您会得到

0,0
1,0
0,1
2,0
1,1
0,2
2,1
1,2
2,2

因此,您需要遍历两个索引的总数。即加总。如您所见,0,0 总计 0,1,00,1 总计 1,依此类推。给我们这样的东西:

0 1 2
1 2 3
2 3 4

要迭代这种对角线模式,我们可以执行以下操作:

// set up your matrix, any size and shape (MxN) is fine, but jagged arrays will break
int[][] matrix = {{0,0,0},{0,0,0},{0,0,0}};

// number is the value we will put in each position of the matrix
int number = 1;

// iterate while number is less than or equal to the total number of positions
// in the matrix. So, for a 3x3 matrix, 9. (this is why the code won't work for
// jagged arrays)
for (int i = 0; number <= matrix.length * matrix[0].length; i++) {
    // start each diagonal at the top row and from the right
    int row = 0;
    int col = i;

    do {
        // make sure row and length are within the bounds of the matrix
        if (row < matrix.length && col < matrix[row].length) {
            matrix[row][col] = number;
            number++;
        }

        // we decrement col while incrementing row in order to traverse down and left
        row++;
        col--;
    } while (row >= 0);
}

请注意,虽然此实现适用于所有矩阵大小(和形状),但它不会尽可能高效。其中nmatrix.length(假设是方阵),这个实现是大O中一个最优的O(n^2)类算法符号;然而,它有效地执行了 2*n^2 次迭代,而最佳解决方案只会执行 n^2

关于java - 二维数组对角填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25921902/

相关文章:

arrays - 我无法快速获取循环的 json 值

javascript - 将函数添加到 javascript 的 Array 类中断循环

java - 如何获取字符串二维数组的子数组(例如减少前 1000 行)?

java - 使用 Spring 的 JdbcTemplate 类时在哪里保存大型 SQL 查询

java - Spring 4 Rest服务404错误

java - 在java中使用递归打印数组

c - 如何初始化包含数组的结构

java - 在 String[][] 中执行搜索

C - 将 const char 十六进制字符串转换为 unsigned char

java - Arraylist 通过 java 中的 tcp?