用于矩阵特定遍历的智能方法



我必须在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循环(一个用于底线,一个用于最右边的列,一个用于其他元素(。但这似乎有点不优雅。

因此,如果存在,我正在寻找仅涉及两个周年纪念日的解决方案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以避免其他"正常"周期出现问题。

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

最新更新