java - 逆时针方向旋转矩阵元素

标签 java arrays matrix multidimensional-array rotation

如何将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。

关于java - 逆时针方向旋转矩阵元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60883969/

相关文章:

java - 如何忽略 spring.factories 中定义的 ApplicationListener?

java - 字符串与其他对象的特殊性

java - 即使实际字符串和预期字符串相同, equalsIgnorecase 也会失败

数组中的 Javascript 数组 - 第一个索引总是被覆盖

java - Java中仅从偶数创建新数组的方法

矩阵的行积与矩阵的列和

mysql - 将列中的项目计为行 MYSQL

java - 根据角度和速度求速度 vector

c++ - 将文件的列读入数组

c - C-指向矩阵的指针