矩阵特殊遍历的智能方法

Intelligent method for particular traversing of a matrix

我必须遍历 java 中的 n x n 矩阵(因此索引为 0,...,n-1),以便为单个元素赋值。我必须从右下角开始,到达左上角。特殊之处在于我不必考虑之前已初始化的 matrix[n-1][n-1] 元素。相邻值相互依赖初始化,必须先初始化

一种方法是在 for 循环

中插入一个 if
for (i = n-1; i >= 0; i--)
  for (j = n-1; j >= 0; j--)
    if (i == n - 1 && j == n - 1)
      //initialize particular value
    else
      //initialize others

但在我看来效率有点低。

另一种方法是在循环外初始化值matrix[n-1][n-1],然后进行3次for循环(一次用于底线,一次用于最右列,一次用于其他元素) .不过好像有点不雅

所以我正在寻找一个解决方案(如果存在的话),该解决方案仅涉及两个annidate for,并且在每个循环中都没有控制(如第一个示例)。

这是一种使用一个循环遍历矩阵的方法,可以轻松避免矩阵[n-1][n-1]。虽然从性能角度来看,不确定计算与 if 相比如何

int[][] matrix = new int[n][n];

int current = n * n - 2;
int row = 0;
int col = 0;
while (current >= 0) {
    col = current % n;
    row = current / n;

    matrix[row][col] = //init stuff
    current--;
}

我认为 Joakim 的解决方案很好,除了 % 和 / 操作...受此启发,我发现了一个有趣的变体来避免它们。我调用了列索引 j1 以避免其他 "normal" 循环出现问题。

matrix[n-1][n-1] = //init code;
int j1 = n-2;

    for (int i = n-1; i >= 0; i--) {
        for (; j1 >= 0; j1--) {
            matrix[i][j1] = //init code;
        }
        j1 = n-1;
    }