public class PrintMatrix {
public static void PrintMatrixNumber(int[][] arr,int x,y) {//x,y代表的是从哪个点开始转圈打印
if(arr==null)
return;
int x1=0;
int x2=arr.length-1;
int y1=0;
int y2=arr[0].length-1;
while(x1<=x2&&y1<=y2)//终止条件就是左上角的点坐标和右下角的点的坐标应满足该式
{
if(x1==x2)
{
while(y<=y2)
System.out.print(arr[x][y++]+" ");
}
else if(y1==y2)
{
while(x<=x2)
System.out.print(arr[x++][y]+" ");
}
else {
while(y!=y2)
{
System.out.print(arr[x][y++]+" ");
}
while(x!=x2)
{
System.out.print(arr[x++][y]+" ");
}
while(y!=y1)
{
System.out.print(arr[x][y--]+" ");
}
while(x!=x1)
{
System.out.print(arr[x--][y]+" ");
}
x++;
y++;
x2--;
y2--;
x1++;
y1++;
}
}
}
public static void main(String[] args) {
int[][] arr= {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
PrintMatrixNumber(arr,0,0);
}
}
在n*n的矩阵中,至于为什么设置输入“(x,y)代表的是从哪个点开始转圈打印“,因为如果在矩阵绕中心旋转90度,问旋转后转圈打印的结果,其实分析可以知道只要我们指定在哪个点开始打印,结果是和旋转后打印是一样的,只不过走一圈的顺序变成(上走,右走,下走,左走)。
旋转90度后的打印结果,还可以通过矩阵外环交换元素,然后再往内环环中交换元素。
这里的1 3 9 7 要交换数值,变成7 1 3 9,下面函数就是实现这样一个环交换数据功能
public static void rotateMatrix(int[][] arr,int x1,int y1,int x2,int y2){
int num=y2-y1;//由于环在旋转中,一个环上的四个点要互相交换数值。则这里表示在一个环的旋转中有num个要这样四个四个的值交换
int tmp;
for(int i=0;i<num;i++){
tmp=arr[x1][y1+i];
arr[x1][y1+i]=arr[x2-i][y1];
arr[x2-i][y1]=arr[x2][y2-i];
arr[x2][y2-i]=arr[x1+i][y2];
arr[x1+i][y2]=temp;
}
}