逆时针旋转矩阵元素

Rotate elements of matrix in counter clockwise direction

我们怎样才能将 5X5 矩阵沿逆时针方向旋转 45 度?

输入将是这样的:

00100
00100
11111
00100
00100

输出应该是这样的:

10001
01010
00100
01010
10001

到目前为止我所做的是我已经读取了 5X5 数组的元素,现在我坚持使用旋转逻辑。

我的代码如下:

import java.awt.Point;
import java.util.Scanner;

public class RotateMatrix {
  public static void main(String a[]) {
    int[][] original = new int[5][5];
    int[][] rotate = new int[5][5];
    String helper[] = new String[5];
    Scanner sc = new Scanner(System.in);
    for (int i = 0; i < 5; i++) {
      helper[i] = sc.next();
    }
    for (int i = 0; i < 5; i++) {
      for (int j = 0; j < 5; j++) {
        original[i][j] = Integer.parseInt(String.valueOf(helper[i].charAt(j)));
      }
    }
  }
}

假设“旋转45度”是指外边框上的条目应该保持在外边框上,你需要做的是:

  • 将外部 5x5 环旋转 2 个位置
  • 将内部 3x3 环旋转 1 个位置

外面的5x5环是这样旋转的:

01234      23456
F   5      1   7
E   6  =>  0   8
D   7      F   9
CBA98      EDCBA

您可以使用 for 循环执行此轮换。这个以顶部、右侧和底部为例:

for (int i = 0; i < 5; i++) {
  if (i < 3) {
    rotate[0][i] = original[0][i+2]; // TOP
    rotate[i][4] = original[i+2][4]; // RIGHT
    rotate[4][4-i] = original[4][4-(i+2)]; // BOTTOM
  } else {
    rotate[0][i] = original[i-2][4]; // TOP
    rotate[i][4] = original[4][4-(i-2)]; // RIGHT
    rotate[4][4-i] = original[4-(i-2)][0]; // BOTTOM
  }
}

添加填充 rotate 左侧的代码和旋转内部 3x3 环的代码后,您就完成了!

这可能是相当多的代码。您可能想要制作一个将矩阵的任意环旋转 1 的方法。然后您将调用此方法 3 次:一次在内环上,两次在外环上,因此它旋转 2.