题目:
给定一个n*n的矩阵,把这个矩阵调整成顺时针转动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)
源代码:
package 数组和矩阵问题;
public class second {
public static void Creatematrix(int array[][],int n) {
int number=1;
for(int i=0;i<n;i++)//初始化矩阵
{
for(int j=0;j<n;j++)
{
array[i][j]=number;
number++;
}
}
}
//初始化并调用Turn方法
public static void Rotate(int a[][],int n){
int tR=0;
int tC=0;
int dR=n-1;
int dC=n-1;
while(tR<dR)
{
Turn(a,tR++,tC++,dR--,dC--,n);
}
}
//转动矩阵
public static void Turn(int a[][],int tR,int tC,int dR,int dC,int n)
{
int times=dC-tC;
int tmp=0;
for(int i=0;i!=times;i++)
{
tmp=a[tR][tC+i];
a[tR][tC+i]=a[dR-i][tC];
a[dR-i][tC]=a[dR][dC-i];
a[dR][dC-i]=a[tR+i][dC];
a[tR+i][dC]=tmp;
}
}
//打印矩阵
public static void printmatrix(int a[][],int n){
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
}
public static void main(String[] args){
int [][]array=new int[4][4];//用二维数组存储矩阵
Creatematrix(array,array.length);//构造矩阵
System.out.println("初始化矩阵为:");//打印初始化矩阵
printmatrix(array,array.length);
Rotate(array,array.length);//进行转动
System.out.println("转动后的矩阵:");//打印转动后的矩阵
printmatrix(array,4);
}
}