我必须遍历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
,并且每个周期都没有控件(如第一个示例)。
答案 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;
}