矩阵行是所有数字的总和(如果有一行),而Matrix col是一列中所有数字的sm 如果我们有这个matix m:
[1 2 3 4]
[3 4 5 1]
[1 2 0 1]
我们的Matrix行是:
[1 3 6 10]
[3 7 12 13]
[1 3 3 4]
我们的Matrix col是:
[1 2 3 4]
[4 6 8 5]
[5 8 8 6]
我正在编写一种方法来同时填写两个NxM矩阵。矩阵行应该由行填充,矩阵col应该填入其列中。
这是我的代码:
Row[0][0] = m[0][0]
Col[0][0] = m[0][0]
for(int i = 0; i < nrRow; i++){
for(int j = 0; i < nrRow; j++){
Row[i][j] = Row[i][j]+m[i][j]
}
}
但我不知道如何填写Col矩阵。 整个操作应该在O(n ^ 2)上完成。
答案 0 :(得分:1)
对于colMatrix
,对于每个索引[i, j]
,您必须填写m[i][j] + colMatrix[i][j - 1]
。其中m
是原始矩阵,colMatrix
是新的矩阵,您正在填写。现在,您必须分别考虑j == 0
时的情况,在这种情况下,您需要colMatrix[i][j] = m[i][j]
类似于rowMatrix
,对于每个索引[i, j]
,值都为m[i][j] + rowMatrix[i - 1][j]
。对于i == 0
,您将拥有rowMatrix[i][j] = m[i][j]
。
以下是代码:
int[][] m = {{1, 2, 3, 4}, {3, 4, 5, 1}, {1, 2, 0, 1}};
int[][] rowMatrix = new int[m.length][m[0].length];
int[][] colMatrix = new int[m.length][m[0].length];
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[0].length; j++) {
if (j == 0) rowMatrix[i][j] = m[i][j];
else rowMatrix[i][j] = m[i][j] + rowMatrix[i][j - 1];
if (i == 0) colMatrix[i][j] = m[i][j];
else colMatrix[i][j] = m[i][j] + colMatrix[i - 1][j];
}
}
答案 1 :(得分:0)
我假设nrRow是行数(本例中为3),nrCol是列数(本例中为4):
//Rows
for(int i = 0; i < nrRow; i++){
Row[i][0] = m[i][0];
for(int j = 0; j < nrCol - 1; j++){
Row[i][j + 1] = Row[i][j] + m[i][j + 1];
}
}
//Columns
for(int i = 0; i < nrCol; i++){
Col[0][i] = m[0][i];
for(int j = 0; j < nrRow - 1; j++){
Col[j + 1][i] = Col[j][i] + m[j + 1][i];
}
}