尝试使用第三个矩阵同时初始化两个矩阵Row和Col

时间:2013-12-26 12:15:48

标签: java arrays

矩阵行是所有数字的总和(如果有一行),而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)上完成。

2 个答案:

答案 0 :(得分:1)

  1. 对于colMatrix,对于每个索引[i, j],您必须填写m[i][j] + colMatrix[i][j - 1]。其中m是原始矩阵,colMatrix是新的矩阵,您正在填写。现在,您必须分别考虑j == 0时的情况,在这种情况下,您需要colMatrix[i][j] = m[i][j]

  2. 类似于rowMatrix,对于每个索引[i, j],值都为m[i][j] + rowMatrix[i - 1][j]。对于i == 0,您将拥有rowMatrix[i][j] = m[i][j]

  3. 以下是代码:

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

  }
}