如何从上到下翻转2D阵列?

时间:2017-07-03 02:53:06

标签: c++ arrays

我试图从上到下翻转一个二维数组。

E.G。 1,2,3

    4,5,6

    7,8,9

    into

    7,8,9

    4,5,6

    1,2,3

3 个答案:

答案 0 :(得分:1)

我不会为您提供代码,因为SO不适用于此,但我会向您展示必要的步骤:

  1. 创建第二个与第一个相同维度的二维数组
  2. 向后循环第一个数组并将size - index - 1处的每一行复制到第二个数组
  3. 将第一个数组替换为第二个数组

答案 1 :(得分:0)

 void flipArrays(int[][] arrays)
{
   int[][] result = new int[arrays.length][arrays[0].length];

   for(int i = 0; i < arrays.length; i++)
   {
      for(int y = 0; y < arrays[0].length; y++)
      {
          result[i][y] = arrays[arrays.length - i - 1][y];
      }
   }
}

我会指导你如何解决这个问题。您可以在Math /伪代码中执行此操作,然后将其转换为您的代码。

  1. 创建一个临时数组,用于包含原始数组的翻转值,因此您不会覆盖原始数组的值。
  2. 将最后一行原始数组传递给临时数组的第一行,等等。

答案 2 :(得分:0)

您可以使用两种指针方法。

在第0行使用一个指针(只是一个整数变量),在第n-1行使用另一个指针。然后交换它们中的元素。然后递增第一个并递减第二个。直到他们指向同一行或直到第一行大于第二行,你才会这样做。

空间复杂度:O(1)时间复杂度:O(row*col)

<强> 伪代码

start := 0
end   := row-1
while start < end
begin
     for each colvar in [0..col-1]
        swap arr[start,colvar] , arr[end,colvar]
     start <- start + 1
     end   <- end - 1
end