编写一种以反向列主要顺序返回二维数组的方法

时间:2019-01-29 22:58:43

标签: java

我正在尝试反转“主要”列中的2D阵列:

int[][] g ={{9, 8, 7, 6},{5, 4, 2, 1} , {3, 9, 2, 3}};

reverseColMajor(g) = {{3, 2, 9, 3} , {1, 2, 4, 5} , {6, 7, 8, 9}};

由于返回的2D数组的长度与原始数组的长度相同,因此,我只是尝试了此方法。

public static int[][] reverseColMajor(int mat[][])
{
     int output[][] = new int[mat.length][mat[0].length];

        int Row = 0;
        int Col = 0;

      for(int r = mat.length-1; r>=0; r--)
      {
          for(int c = mat[0].length-1; c>=0; c--)
          {
              output[Row][Col] = mat[r][c];
              Col++;
          }
          Row++;
      }
      return output;
 }

我已经在下面尝试过了,但是它说我超出范围了。

3 个答案:

答案 0 :(得分:2)

由于Col越过数组的边界,您越界异常。内循环完成后,您必须将Col设置为零。

      for(int c = mat[0].length-1; c>=0; c--)
      {
          output[Row][Col] = mat[r][c];
          Col++;
      }
      Col=0;
      Row++;

答案 1 :(得分:0)

在嵌套循环后设置Col = 0:

public static int[][] reverseColMajor(int mat[][])
{
     int output[][] = new int[mat.length][mat[0].length];

        int Row = 0;
        int Col = 0;

      for(int r = mat.length-1; r>=0; r--)
      {
          for(int c = mat[0].length-1; c>=0; c--)
          {
              output[Row][Col] = mat[r][c];
              Col++;
          }
          Col = 0;
          Row++;
      }
      return output;
 }

答案 2 :(得分:0)

我会将方法分为两部分,一个用于反转1D数组,另一个用于使用第一个反转2D数组,因此这些方法更简单,可重用且非常相似。

public static int[][] reverse(int[][] in) {
    int[][] out = new int[in.length][];
    for (int i = 0, j = in.length - 1; j >= 0; i++,j--)
        out[j] = reverse(in[i]);
    return out;
}
public static int[] reverse(int[] in) {
    int[] out = new int[in.length];
    for (int i = 0, j = in.length - 1; j >= 0; i++,j--)
        out[j] = in[i];
    return out;
}

测试

int[][] g = {{9, 8, 7, 6}, {5, 4, 2, 1}, {3, 9, 2, 3}};
System.out.println(Arrays.deepToString(reverse(g)));

输出

[[3, 2, 9, 3], [1, 2, 4, 5], [6, 7, 8, 9]]