1、顺(逆)时针旋转MxN矩阵

来源:互联网 发布:淘宝客宣传语 编辑:程序博客网 时间:2024/06/12 01:25

(1)分析

矩阵旋转实质上是行与列的变换。

例如:3x4矩阵

8 6 0 2

1 5 8 7

8 5 1 4

①顺时针旋转90度

8 1 8

5 5 6

1 8 0

4 7 2

原始矩阵元素的行号[i]对应旋转后矩阵的列号[M-i-1]

原始矩阵元素的列号[j]对应旋转后矩阵的行号[j]

即reverseArray[j][M - i - 1] = originArray[i][j]

②逆时针旋转90度

2 7 4

0 8 1

6 5 5

8 1 8

原始矩阵元素的行号[i]对应旋转后矩阵的列号[i]

原始矩阵元素的列号[j]对应旋转后矩阵的行号[N-j-1]

即reverseArray[N-j -1][i] = originArray[i][j]

(2)实现

package com.test;public class ReverseMatrix {private static final int M = 3, N = 4;public static void main(String[] args) {int[][] originMatrix = new int[M][N];int[][] reversMatrix = new int[N][M];// 初始化原始矩阵for (int i = 0; i < M; i++)for (int j = 0; j < N; j++)originMatrix[i][j] = (int) (Math.random() * 10);System.out.println("原始矩阵:");printMatrix(originMatrix);reverseMatrix1(originMatrix, reversMatrix);System.out.println("顺时针旋转90度:");printMatrix(reversMatrix);reverseMatrix2(originMatrix, reversMatrix);System.out.println("逆时针旋转90度:");printMatrix(reversMatrix);}// 顺时针旋转90度public static void reverseMatrix1(int[][] originArray, int[][] reverseArray) {for (int i = 0; i < M; i++)for (int j = 0; j < N; j++)reverseArray[j][M - i - 1] = originArray[i][j];}// 逆时针旋转90度public static void reverseMatrix2(int[][] originArray, int[][] reverseArray) {for (int i = 0; i < M; i++)for (int j = 0; j < N; j++)reverseArray[N - j - 1][i] = originArray[i][j];}public static void printMatrix(int[][] matrix) {int rows = matrix.length;int cols = matrix[0].length;for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++)System.out.print(matrix[i][j] + " ");System.out.println();}}}


0 0
原创粉丝点击