本文共 1807 字,大约阅读时间需要 6 分钟。
JAVA算法:矩阵旋转(JAVA代码)
给定一个N*N的二维矩阵,顺时针旋转90度后,输出该矩阵。
例如:
给定矩阵:
1 2 3 4
5 6 7 8 9 10 11 12 13 14 15 16顺时针旋转90度后,输出结果:
13 9 5 1
14 10 6 2 15 11 7 3 16 12 8 4算法设计
package com.bean.algorithmexec;public class RotateMatrix { /* * 给定一个N*N的整形矩阵Matrix,把这个矩阵顺时针旋转90度,输入(打印)元素值。 * 例如: * 1 2 3 4 * 5 6 7 8 * 9 10 11 12 * 13 14 15 16 * 输出结果为: * 13 9 5 1 * 14 10 6 2 * 15 11 7 3 * 16 12 8 4 * * 要求:额外空间复杂度为O(1) * */ public static void main(String[] args) { // TODO Auto-generated method stub //初始化一个 4*4的整形矩阵,从第一行第一列从左向右,第二行,第三行,直到第四行依次赋值 1,2,...16. int[][] matrixDemo=new int[4][4]; matrixDemo=createMatrix(); printMatrix(matrixDemo); System.out.println(); //顺时针旋转90度打印 rotate(matrixDemo); printMatrix(matrixDemo); } //顺时针旋转90度打印 private static void rotate(int[][] matrix) { // TODO Auto-generated method stub int tR=0; int tC=0; int dR=matrix.length-1; int dC=matrix[0].length-1; while(tR<=dR) { rotateEdge(matrix, tR++, tC++, dR--,dC--); } } //顺时针旋转90度打印 private static void rotateEdge(int[][] matrix, int tR, int tC, int dR, int dC) { // TODO Auto-generated method stub int times=dC-tC; // timies就是总的组数 int temp=0; for(int i=0; i!=times;i++) { //一次循环就是一组调整 temp=matrix[tR][tC+i]; matrix[tR][tC+i]=matrix[dR-i][tC]; matrix[dR-i][tC]=matrix[dR][dC-i]; matrix[dR][dC-i]=matrix[tR+i][dC]; matrix[tR+i][dC]=temp; } } //生成矩阵 private static int[][] createMatrix() { // TODO Auto-generated method stub int matrix[][]=new int[4][4]; int k=1; for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { matrix[i][j]=k; k++; } } return matrix; } //顺序打印矩阵元素 private static void printMatrix(int[][] matrix) { for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { System.out.print(matrix[i][j]+"\t"); } System.out.println(); } } }
转载地址:http://entdi.baihongyu.com/