转圈打印矩阵

在这里插入图片描述

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;
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值