JAVA算法:矩阵旋转(JAVA代码)

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();
		}
		
	}
	
}

 

你可能感兴趣的:(算法分析与设计,JAVA算法学习)