矩阵特定遍历的智能方法

时间:2018-06-29 10:29:57

标签: java matrix traversal

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

一种方法是在if周期中插入for

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循环(一个用于底行,一个用于最右边的列,一个用于其他元素)。但这似乎不太优雅。

因此,我正在寻找一种解决方案,如果存在的话,该解决方案仅涉及两个an注for,并且每个周期都没有控件(如第一个示例)。

2 个答案:

答案 0 :(得分:2)

这是在矩阵中使用一个循环的方法,可轻松避免使用matrix [n-1] [n-1]。从性能的角度来看,不确定如何将计算与假设条件进行比较

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--;
}

答案 1 :(得分:1)

我认为Joakim的解决方案很好,除了%和/运算符...受此启发,我发现了一个有趣的变体来避免它们。我将列索引称为j1,以避免其他“正常”循环出现问题。

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;
    }