【问题标题】:Rotate elements of matrix in counter clockwise direction逆时针方向旋转矩阵的元素
【发布时间】:2020-07-08 01:44:10
【问题描述】:

我们如何将5X5 矩阵沿conuter 顺时针方向旋转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)));
      }
    }
  }
}

【问题讨论】:

  • 您将如何手动进行此轮换? 2x2 角中的元素会发生什么变化?
  • 矩阵大小是固定的。它总是5X5矩阵。我需要逻辑或任何公式在java中实现它

标签: java arrays matrix multidimensional-array rotation


【解决方案1】:

假设“旋转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。

【讨论】:

  • 非常感谢..你的代码帮了我很多..我已经完成了其余的代码..!!
猜你喜欢
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 2019-02-08
  • 2020-04-28
  • 1970-01-01
相关资源
最近更新 更多