矩阵特殊遍历的智能方法
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;
}
我必须遍历 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;
}