【问题标题】:How to rotate 2D array 90º anticlockwise? [duplicate]如何将二维阵列逆时针旋转 90º? [复制]
【发布时间】:2021-03-24 09:10:47
【问题描述】:

我需要将给定的矩阵逆时针旋转 90º,但我不知道如何开始。

例如:

从这里开始

5   10   8   9
16  30   25  41
7   17   50  12
45  8    22  34

到这里:

9   41   12  34
8   25   50  22
10  30   17  8
5   16   7   45

【问题讨论】:

    标签: java arrays matrix multidimensional-array rotation


    【解决方案1】:

    这就像一个矩阵转置。您可以使用循环中的循环,或流中的流

    int d = 4;
    int[][] arr1 = {
            {5, 10, 8, 9},
            {16, 30, 25, 41},
            {7, 17, 50, 12},
            {45, 8, 22, 34}
    };
    
    int[][] arr2 = new int[d][d];
    int[][] arr3 = new int[d][d];
    int[][] arr4 = new int[d][d];
    
    IntStream.range(0, d).forEach(i ->
            IntStream.range(0, d).forEach(j -> {
                // matrix transpose
                arr2[j][i] = arr1[i][j];
                // turn matrix 90º clockwise
                arr3[j][d - 1 - i] = arr1[i][j];
                // turn matrix 90º counterclockwise
                arr4[d - 1 - j][i] = arr1[i][j];
            }));
    
    Arrays.stream(arr4).map(Arrays::toString).forEach(System.out::println);
    // [9, 41, 12, 34]
    // [8, 25, 50, 22]
    // [10, 30, 17, 8]
    // [5, 16, 7, 45]
    

    【讨论】:

      【解决方案2】:

      原始矩阵中的每个单元格[i][j] 都成为旋转矩阵中的一个单元格[4-1-j][i]

      int d = 4;
      int[][] arr1 = {
              {5, 10, 8, 9},
              {16, 30, 25, 41},
              {7, 17, 50, 12},
              {45, 8, 22, 34}};
      
      int[][] arr2 = new int[d][d];
      
      for (int i = 0; i < d; i++)
          for (int j = 0; j < d; j++)
              arr2[d - 1 - j][i] = arr1[i][j];
      
      for (int row = 0; row < d; row++)
          System.out.println(Arrays.toString(arr2[row]));
      // [9, 41, 12, 34]
      // [8, 25, 50, 22]
      // [10, 30, 17, 8]
      // [5, 16, 7, 45]
      

      另见:
      How do I rotate a matrix 90 degrees counterclockwise?
      Is there a way to reverse specific arrays in a multidimensional array?

      【讨论】:

        猜你喜欢
        • 2019-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        相关资源
        最近更新 更多